UITableView最简单的高度自适应原理
2016-09-13 17:41
253 查看
在iOS开发过程中,UITableView是应用最为广泛的控件之一,而在实现过程中,如何动态的去计算每个单元格的高度往往会纠结着我们,我也遇到过同样的问题,经过多次的测试和阅读大量的资源,大概知道集中高度自适应的方法,它们归根到底还是对AutoLayout的应用。方法一:使用xib进行布局,添加约束;(不常用)二:代码手写,我在工程中使用的是Masonry添加约束,值得一提的是不管哪一种方式都要保证有一个控件能够撑起cell格。下面直接上代码。
这里的viewController.h来初始化表视图,
子类化cell,JC_TableViewCell.h
JC_TableViewCell.m文件
运行结果如图所示
更多请关注本人微博,谢谢阅览
这里的viewController.h来初始化表视图,
// // ViewController.m // TestTableView_JC // // Created by 祝国庆 on 16/4/11. // Copyright © 2016年 祝国庆. All rights reserved. // #import "ViewController.h" #import "Masonry.h" #import "JC_TableViewCell.h" #import "TestModel.h" @interface ViewController ()<UITableViewDelegate, UITableViewDataSource> @property (nonatomic, strong) UITableView *tableView_jc; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.tableView_jc = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; self.tableView_jc.delegate = self; self.tableView_jc.dataSource = self; _tableView_jc.backgroundColor = [UIColor grayColor]; self.tableView_jc.tableFooterView = [[UIView alloc]init]; [self.view addSubview:_tableView_jc]; [_tableView_jc mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_tableView_jc.superview).with.offset(20); make.left.equalTo(_tableView_jc.superview.mas_left); make.right.equalTo(_tableView_jc.superview.mas_right); make.bottom.equalTo(_tableView_jc.superview.mas_bottom); }]; <span style="color:#ff0000;"> </span><span style="background-color: rgb(255, 102, 102);">self.tableView_jc.estimatedRowHeight = 40;//估算高度</span> <span style="background-color: rgb(255, 102, 102);"> self.tableView_jc.rowHeight = UITableViewAutomaticDimension;<span style="color:#ff0000;"> </span> //高度自适应最重要的两句话,不用再给高度了 </span> } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 3; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { JC_TableViewCell *testCell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; if (testCell == nil) { testCell = [[JC_TableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; testCell.backgroundColor = [UIColor colorWithRed:arc4random() % 10 * 0.1 green:arc4random() % 10 * 0.1 blue:arc4random() % 10 * 0.1 alpha:1.0]; } testCell.selectionStyle = UITableViewCellSelectionStyleNone; TestModel *model = [[TestModel alloc]init]; if (indexPath.row == 0) { model.name = @"numn.1"; model.introduction = @"12345678976543214567854324567865432456786543245"; model.imgName = @"login_bg"; } else if(indexPath.row == 1) { model.name = @"num.2"; model.introduction = @"adfsgdhjklggfdsdafghjklhgfdsaDFGHJKLHGF"; model.imgName = @"login_bg"; } else if(indexPath.row == 2) { model.name = @"num.3"; model.introduction = @"收到了发哈看了好久放假哎活动房环球而强迫你覅偶后覅和企鹅王if好奇问废话IQ而恢复IQ了发哈看了好久放假哎活动房环球而强迫你覅偶后覅和企鹅王if好奇问废话IQ而恢复IQ了发哈看了好久放假哎活动房环球而强迫你覅偶后覅和企鹅王if好奇问废话IQ而恢复IQ了发哈看了好久放假哎活动房环球而强迫你覅偶后覅和企鹅王if好奇问废话IQ而恢复IQ"; model.imgName = @"login_bg"; } testCell.testModel = model; return testCell; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
子类化cell,JC_TableViewCell.h
#import <UIKit/UIKit.h> #import "TestModel.h" @interface JC_TableViewCell : UITableViewCell //@property(nonatomic, strong) TestModel *testModel; @property (strong, nonatomic) UILabel *nameLabel; @property (strong, nonatomic) UILabel *introductionLabel; @property (strong, nonatomic) UIImageView *userPhoto; @end
JC_TableViewCell.m文件
#import "JC_TableViewCell.h" #import "Masonry.h" @implementation JC_TableViewCell - (void)awakeFromNib { [super awakeFromNib]; // Initialization code } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { //... /* @property (weak, nonatomic) IBOutlet UILabel *nameLabel; @property (weak, nonatomic) IBOutlet UILabel *introductionLabel; @property (weak, nonatomic) IBOutlet UIImageView *userPhoto; */ _userPhoto = [[UIImageView alloc]init]; _userPhoto.contentMode = UIViewContentModeScaleAspectFit; _userPhoto.backgroundColor = [UIColor cyanColor]; [self.contentView addSubview:_userPhoto]; _nameLabel = [[UILabel alloc]init]; _nameLabel.font = [UIFont systemFontOfSize:14.0]; _nameLabel.backgroundColor = [UIColor yellowColor]; [self.contentView addSubview:_nameLabel]; _introductionLabel = [[UILabel alloc]init]; _introductionLabel.backgroundColor = [UIColor lightGrayColor]; _introductionLabel.font = [UIFont systemFontOfSize:14.0]; _introductionLabel.numberOfLines = 0; [self.contentView addSubview:_introductionLabel]; } return self; } - (void)setTestModel:(TestModel *)testModel { if (_testModel != testModel) { _testModel = testModel; [self layoutIfNeeded]; } } - (void)layoutSubviews { [super layoutSubviews]; <span style="color:#ff0000;"><strong> /* *可以有部分控件高哦度固定, *但是必须有一个控件撑起来cell, *比如userPhoto控件从顶部出发,自我介绍控件高度没写,顶部与头像控件底部关联,底部等于cell的底部 */</strong></span> //头像 [_userPhoto mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(10); make.top.mas_equalTo(10); make.width.height.mas_equalTo(60); }]; //用户名 [_nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(_userPhoto.mas_right).with.offset(5); make.width.mas_equalTo(100); make.centerY.equalTo(_userPhoto.mas_centerY); make.height.mas_equalTo(20); }]; //自我介绍 [_introductionLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(10); make.right.equalTo(_introductionLabel.superview.mas_right).with.offset(-10); make.top.equalTo(_userPhoto.mas_bottom).with.offset(10); <span style="background-color: rgb(255, 102, 102);"> make.bottom.equalTo(_introductionLabel.superview.mas_bottom);//底部等于cell的di'bu </span> }]; self.nameLabel.text = _testModel.name; self.introductionLabel.text = _testModel.introduction; self.userPhoto.image = [UIImage imageNamed:_testModel.imgName]; }
运行结果如图所示
更多请关注本人微博,谢谢阅览
相关文章推荐
- 只需要简单几行代码,便可以实现UITableView的自适应高度。。。。
- UItableView cell 自适应高度
- UITableView使用autolayout如何自适应高度
- UITableView中自定义Cell,自适应高度
- UITableView的cell自适应高度
- UItableView cell 自适应高度
- UItableview自适应高度
- UItableView cell 自适应高度
- (原创)iOS中cell高度自适应方法UITableView设置
- UIday1101:UITableView 3 自定义cell 多种cell混合使用 cell自适应高度
- 关于 UITableView 中 网络获取图片 cell 自适应高度的问题
- UITableView 行自适应高度的实现
- 关于 UITableView 中 cell 自适应高度的问题
- swift UITableView cell自适应高度
- UITableView 行自适应高度的实现
- ios UITableView高度自适应(转)
- iPhone UItableView cell 自适应高度
- IOS UItableview UIcollectionview cell高度自适应
- 爬爬爬之路:UI(十一) UITableView(三) 自定义Cell 多Cell混合 自适应高度 及cell的状态控制
- Masonry 和 UITableView-FDTemplateLayoutCell 实现自适应高度的Cell