• iOS UILabel根据文字获取高度及UITableCell动态获取高度(以截取快递信息为例)


    #import <UIKit/UIKit.h>
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    
    @end
    #import "AppDelegate.h"
    #import "RootViewController.h"
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        
        self.window.rootViewController = [[RootViewController alloc] init];
        
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    
    @end
    #import <UIKit/UIKit.h>
    
    @interface RootViewController : UIViewController
    
    @end
    #import "RootViewController.h"
    
    #define cellWidth  [UIScreen mainScreen].bounds.size.width
    
    @interface RootViewController ()<UITableViewDataSource,UITableViewDelegate>
    {
    //    NSMutableArray *dateArr;
        NSMutableArray *timeArr;// 时间
        NSMutableArray *messsgeArr; // 物流信息
        UITableView * _tableView;
    }
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    //    self.view.backgroundColor = [UIColor lightGrayColor];
    //    dateArr = [[NSMutableArray alloc] init];
        timeArr = [[NSMutableArray alloc] init];
        messsgeArr = [[NSMutableArray alloc] init];
        
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, cellWidth, [UIScreen mainScreen].bounds.size.height - 20) style:UITableViewStylePlain];
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.backgroundColor = [UIColor lightGrayColor];
        [self.view addSubview:_tableView];
        //去掉多余的cell
        _tableView.tableFooterView = [[UIView alloc] init];
        
        // 请求数据并进行处理
        [self dealWithExpressMessage];
        
    
    }
    
    - (void)dealWithExpressMessage{
        NSString *htmlString = @"http://wap.kuaidi100.com/wap_result.jsp?rand=20120517&id=zhongtong&fromWeb=null&&postid=718969747957";
        
        NSString *dataString = [NSString stringWithContentsOfURL:[NSURL URLWithString:htmlString] encoding:NSUTF8StringEncoding error:nil];
        NSData *htmlData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
        
        NSString *string = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
        NSArray * array = [string componentsSeparatedByString:@"<p>&middot"];
        // 分割后,获取有用的信息
        NSMutableArray *mArr = [[NSMutableArray alloc] init];
        for (int i = 0; i < array.count; i++ ) {
            if ((i != 0) && (i != array.count - 1)) {
                [mArr addObject:array[i]];
            }
            if (i == array.count -1) {
                NSArray *newArr = [array[i] componentsSeparatedByString:@"</form>"];
                NSString *string = newArr[0];
                [mArr addObject:string];
            }
        }
        // 将获取到的数据分开
        for (NSString *subString in mArr) {
            
            NSArray *array = [subString componentsSeparatedByString:@"<br />"];
            NSString *timeString = array[0];
            NSArray *dateArray = [timeString componentsSeparatedByString:@";"];
            [timeArr addObject:dateArray[1]];
            /*  将年月日与时分秒的时间分开
            NSArray *spaTimeArr = [timeString componentsSeparatedByString:@" "];
            NSArray *dateArray = [spaTimeArr[0] componentsSeparatedByString:@";"];
            // 获取年月日的时间
            [dateArr addObject:dateArray[1]];
            //获取时分秒的时间
            [timeArr addObject:spaTimeArr[1]];
            */
    //        NSLog(@" == %@",dateArray[1]);
            
            NSString *address = array[1];
            NSArray *addressArr = [address componentsSeparatedByString:@"</p>"];
            // 存放快递的信息
            NSString *newString = [addressArr[0] stringByReplacingOccurrencesOfString:@" " withString:@""];
            [messsgeArr addObject:newString];
            NSLog(@"==%@",newString);
        }
    //    NSLog(@"===== %@",messsgeArr);
    }
    
    #pragma mark -- tableView 的数据配置 --
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
        return 1;
    }
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return timeArr.count;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableView *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
        return cell.frame.size.height;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        
        
        static NSString *identifier = @"cell";
        tableView.separatorStyle = UITableViewCellSelectionStyleNone;
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        }
        cell.userInteractionEnabled = NO;
        for (UIView *subView in cell.subviews) {
            [subView removeFromSuperview];
        }
        cell.backgroundColor = [UIColor lightGrayColor];
        UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, cellWidth, 20)];
        timeLabel.textColor = [UIColor blueColor];
        timeLabel.font = [UIFont systemFontOfSize:14];
        timeLabel.backgroundColor = [UIColor clearColor];
        [cell addSubview:timeLabel];
        timeLabel.text = timeArr[indexPath.row];
        
        UILabel *messageLabel = [[UILabel alloc] init];
        [cell addSubview:messageLabel];
        messageLabel.text = messsgeArr[indexPath.row];
    
        messageLabel.numberOfLines = 0;
        messageLabel.backgroundColor = [UIColor clearColor];
        messageLabel.textColor = [UIColor blackColor];
        UIFont *font = [UIFont fontWithName:@"Arial" size:16];
        messageLabel.font = font;
        CGSize constraint = CGSizeMake(cellWidth - 10, 20000);
        CGSize size = [messageLabel.text sizeWithFont:font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
    //    CGSize labelSize = [messageLabel.text boundingRectWithSize:boundSize options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]} context:nil].size;
        messageLabel.frame = CGRectMake(5, 20, size.width,size.height);
        CGRect rect = cell.frame;
        rect.size.height = timeLabel.frame.size.height + messageLabel.frame.size.height + 5;
        cell.frame = rect;
    
        return cell;
    }
    
    
    @end
  • 相关阅读:
    基于Antlr4编写DSL
    【整理】ANTLR应用案例 | 在路上
    【整理】ANTLR应用案例 | 在路上
    The ANTLR Parser Generator
    ANTLR4权威参考手册
    ANTLR Examples
    ANTLRWorks: The ANTLR GUI Development Environment
    http://www.cnblogs.com/vowei/archive/2012/08/24/2654287.html
    写一个编译器
    写一个编译器
  • 原文地址:https://www.cnblogs.com/lantu1989/p/4966252.html
Copyright © 2020-2023  润新知