本文来自尚妆iOS团队嘉文
发表于尚妆github博客,欢迎订阅!git
由sunny大神出品的自动计算UITableviewCell高度
FDTemplateLayoutCell_下载github
目前最流行的AutoLayout框架,比较轻量级
Masonry_下载框架
将上述两个第三方下载后(或者使用Cocoapods)导入工程,而后建立所需文件,此时的工程目录:布局
MyTableViewCell.h 建立Model属性,用来传值atom
#import <UIKit/UIKit.h> #import "Model.h" @interface MyTableViewCell : UITableViewCell @property (nonatomic, strong)Model *model; @end
MyTableViewCell.m 使用Masonry布局spa
#import "MyTableViewCell.h" #import "Masonry.h" @implementation MyTableViewCell{ UILabel *_textLB; } - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { [self createSubViews]; } return self; } /** * 注意,无论布局多复杂,必定要有相对于cell.contentView的bottom的约束 */ - (void)createSubViews{ _textLB = [UILabel new]; _textLB.backgroundColor = [UIColor orangeColor]; _textLB.numberOfLines = 0; [self.contentView addSubview:_textLB]; [_textLB mas_makeConstraints:^(MASConstraintMaker *make) { make.top.left.equalTo(self.contentView).offset(10); make.bottom.right.equalTo(self.contentView).offset(-10); }]; } /** * 赋值 * * @param model ViewController传递过来的Model用来赋值 */ - (void)setModel:(Model *)model{ if (_model != model) { _model = model; _textLB.text = [NSString stringWithFormat:@"%@", model.text]; } }
Model.h 建立数据属性debug
#import <Foundation/Foundation.h> @interface Model : NSObject @property (nonatomic, copy)NSString *text; @end
Model.m (使用KVC时,若是代码中的key值不存在,会抛出异常,能够在类中经过重写它提供下面的这个方法来解决这个问题)code
#import "Model.h" @implementation Model - (void)setValue:(id)value forUndefinedKey:(NSString *)key{ } @end
ViewController.horm
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @end
ViewController.m 建立列表视图,并实现自适应高度blog
#import "ViewController.h" #import "MyTableViewCell.h" #import "Model.h" #import "UITableView+FDTemplateLayoutCell.h" @interface ViewController ()<UITableViewDataSource, UITableViewDelegate> @end @implementation ViewController{ NSMutableArray *_allDataArr; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = [UIColor lightGrayColor]; [self initailData]; [self createMianViews]; } - (void)initailData{ _allDataArr = [NSMutableArray array]; /** * 虚拟数据 */ for (NSInteger i = 0; i < 3; i++) { Model *model = [Model new]; model.text = @"在东方世界里,挑选小公牛到竞技场角斗有必定的程序。每一头被带进场地的公牛都要向手持长矛刺它的斗牛士发起进攻。其勇敢程度是根据它不顾矛刃的刺痛向斗牛士进攻的次数来认真评定的"; [_allDataArr addObject:model]; } } - (void)createMianViews{ UITableView *myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; myTableView.backgroundColor = [UIColor whiteColor]; myTableView.delegate = self; myTableView.dataSource = self; myTableView.fd_debugLogEnabled = YES; //打开自适应高度debug模式 [self.view addSubview:myTableView]; [myTableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"cell"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark -UITableViewDataSource - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; [self setupModelOfCell:cell AtIndexPath:indexPath]; return cell; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return _allDataArr.count; } #pragma mark -UITableViewDelegate - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return [tableView fd_heightForCellWithIdentifier:@"cell" cacheByIndexPath:indexPath configuration:^(id cell) { [self setupModelOfCell:cell AtIndexPath:indexPath]; }]; } #warning 重点(自适应高度必须实现) //预加载Cell内容 - (void)setupModelOfCell:(MyTableViewCell *)cell AtIndexPath:(NSIndexPath *)indexPath{ cell.model = [_allDataArr objectAtIndex:indexPath.row]; } @end