UITableView详解:12-动态调整Cell高度(self-sizing)
在iOS 8中,苹果引入了UITableView的一项新功能–Self Sizing Cells,对于不少开发者来说这是新SDK中一项非常有用的新功能。在iOS 8之前,如果需要在单元格中展示可变高度的动态内容时,需要手动计算行高,而Self Sizing Cells为展示动态内容提供了一个解决方案。
self-sizing相关属性与方法
当需要使用self-sizing功能时,需要同时满足如下几个预设条件才能使用。
确认需要适配的iOS版本高于iOS8
必须使用自动布局方式来定义单元格的样式
设置表视图的estimatedRowHeight属性,即单元格的预估行高,一般设置为单元格的默认行高
@property (nonatomic) CGFloat estimatedRowHeight;
- 将表视图的rowHeight属性设置为UITableViewAutomaticDimension
UIKIT_EXTERN const CGFloat UITableViewAutomaticDimension;
示例代码
下方的示例代码在前面自定义单元格章节的代码基础上进行了修改,实现了可以动态改变单元格的行高。
- 使用XIB搭建Cell并设置约束。对于需要动态调整高度的控件,在使用自动布局设置约束时,一定不要设置其绝对高度,其高度要根据控件与其他控件的相对位置约束来确定。
- 针对可变高度的UILabel需要设置其行数Lines为0
- 为表视图设置estimatedRowHeight以及rowHeight属性
self.tableView.estimatedRowHeight = 127;
self.tableView.rowHeight = UITableViewAutomaticDimension;
- 更新MYModle类的初始化方法,随机获取content属性的内容
+(instancetype)myCellModel {
MYModel *cellModel = [[MYModel alloc]init];
cellModel.userName = @"99iOS";
cellModel.profileImageName = @"99logo";
cellModel.iconName = @"99logo";
cellModel.source = @"来自99的iPhone 7 Plus";
int arcNumber = arc4random_uniform(2);
if (arcNumber == 1) {
cellModel.content = @"对于需要动态调整高度的控件,在使用自动布局设置约束时,一定不要设置其绝对高度,其高度要根据控件与周边其他控件的位置约束来决定。如下图所示";
}else {
cellModel.content = @"苹果iOS开发进阶之路";
}
return cellModel;
}
运行效果:
示例代码
https://github.com/99ios/8.2.12
文章发布时间为: November 9th , 2016 at 10:56 pm
最后编辑时间为: September 13th , 2017 at 02:15 pm
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 13th , 2017 at 02:15 pm
本文由 99ios 创作,转载请注明出处