美文网首页
ios UITableView使用自适应布局

ios UITableView使用自适应布局

作者: ISwiftUI | 来源:发表于2017-01-14 16:50 被阅读167次

    1.主要针对的布局方式是约束布局 可以是xib 也可以是masonry
    2.系统要求iOS8及以上版本
    3.注意:如果出现高度计算不对,可能是约束设置不对,解决办法重新设置约束
    4.实现思路:第一步是设置预设高度 第二步自动计算高度 第三步高度缓存
    5.附源码

    主要代码:

    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 100;
    

    次要代码:

    \#import "ListViewController.h"
    \#import "ListTableViewCell.h"
    static NSString * const ReuseIdentifier = @"cell";
    @interface ListViewController ()
    @property (weak, nonatomic) IBOutlet UITableView *tableView;
    @property (nonatomic, strong) NSMutableArray *dataArray;
    @end
    @implementation ListViewController
    -(void)viewDidLoad
    {
       [super viewDidLoad];
       self.navigationItem.title = @"标题";
       self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"reloaData" style:UIBarButtonItemStylePlain target:self action:@selector(rightBarButtonItemDidClick:)];
       [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([ListTableViewCell class]) bundle:nil] forCellReuseIdentifier:ReuseIdentifier];
    }
    
    #pragma mark - UITableViewDelegate
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
       return self.dataArray.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
       ListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReuseIdentifier forIndexPath:indexPath];
       cell.model = self.dataArray[indexPath.row];
       return cell;
    }
    
    #pragma mark - Methods
    - (void)rightBarButtonItemDidClick:(UIBarButtonItem *)item {
          [self.tableView reloadData];
    }
    
    #pragma mark - Getters
    -(NSMutableArray *)dataArray {
       if (!_dataArray) {
           _dataArray = [NSMutableArray array];
           NSString *string = @"Siri 让你能够利用语音来完成发送信息、安排会议、查看最新比分等更多事务。只要说出你想做的事,Siri 就能帮你办到。Siri 可以听懂你说的话、知晓你的心意,甚至还能有所回应。iOS 7 中的 Siri 拥有新外观、新声音和新功能。它的界面经过重新设计,以淡入视图浮现于任意屏幕画面的最上层。Siri 回答问题的速度更快,还能查询更多信息源,如维基百科。它可以承担更多任务,如回电话、播放语音邮件、调节屏幕亮度,以及更多。";
           //生成假数据
           for (int i = 0; i < 100; i++) {
               ListModel *model = [[ListModel alloc] init];
               NSInteger index = (arc4random()%(string.length / 20)) * 20;
               model.desc = [string substringToIndex:MAX(20, index)];
               [_dataArray addObject:model];
           }
       }
       return _dataArray;
    }
    @end
    
    // 缓存用全局字典存
    #pragma mark - UITableViewDelegate
    -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
       NSNumber *height = [self.heightAtIndexPath objectForKey:indexPath];
       if(height){
           return height.floatValue;
       }
       else {
           return 100;
       }
    }
    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
       NSNumber *height = @(cell.frame.size.height);
       [self.heightAtIndexPath setObject:height forKey:indexPath];
    }
    

    相关文章

      网友评论

          本文标题:ios UITableView使用自适应布局

          本文链接:https://www.haomeiwen.com/subject/lmwebttx.html