iOS中的动态单元格

UITableView在我们的iOS应用程序中很普遍。 我们可以在应用程序中的任何位置看到它。 但是作为新生,在发展中看起来很麻烦。 我想分享一些方法来在UITableView中执行动态单元格。

  • 第一种方法是在协议方法中返回高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath每行- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 通常,我强烈建议您在设置TableView的EstimateRowHeight值之前,不建议使用此方法计算高度值。 如果您使用的是MVC或MVVM体系结构模式,则将计算过程写入Model类会更好。
  -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
NSDictionary *属性= @ {NSFontAttributeName:[UIFont systemFontOfSize:18]};
返回[self.array [indexPath.row] boundingRectWithSize:CGSizeMake(300,MAXFLOAT)选项:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading属性:属性上下文:nil] .size.height
+ [self.subArray [indexPath.row] boundingRectWithSize:CGSizeMake(300,MAXFLOAT)选项:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading属性:属性上下文:nil] .size.height
+15;
}

警告:设置estimateRowHeight会更好。

  • 第二种方法是在单元格的布局中使用约束。

在此方法中,我们不应调用协议方法来返回单元格的高度。 我们应注意其布局,其垂直约束应是完整而具体的。 顶部的单元格的顶部应具有约束,而最后一个单元格的底部也应具有约束。

在这种情况下,标题标签的单元格顶部有5个空格,子标签也有5个空格。 为满足此要求,子标签的单元格底部有5个空格。 (我用砖石来限制布局)

码:

  -(instancetype)initWithStyle:(UITableViewCellStyle)样式复用标识符:(NSString *)reuseIdentifier { 
如果(self = [super initWithStyle:style redirectIdentifier:reuseIdentifier]){
self.titleLabel = [[UILabel alloc] init]; self.titleLabel.numberOfLines = 0;
self.titleLabel.textColor = [UIColor redColor];
self.subLabel = [[UILabel alloc] init]; self.subLabel.numberOfLines = 0;
[self addSubview:_titleLabel];
[self addSubview:_subLabel];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker * make){make.top.equalTo(self).with.offset(5); make.left.equalTo(self).with.offset(5); make.width.lessThanOrEqualTo(@ 300); make.height.greaterThanOrEqualTo(@ 0); }];
[self.subLabel mas_makeConstraints:^(MASConstraintMaker * make){make.top.equalTo(self.titleLabel.mas_bottom).with.offset(5); make.left.equalTo(self).with.offset(5); make.width.lessThanOrEqualTo(@ 300); make.height.greaterThanOrEqualTo(@ 0); make.bottom.equalTo(self).with.offset(-5);
}];
自我回报;
}

此外,设置估算的RowHeight和rowHeight将很安全。

  tableView.estimatedRowHeight = 44; 
tableView.rowHeight = UITableViewAutomaticDimension;

此方法的结果:

  • 关于估计的行高。

如果我们不设置tableview的EstimateRowHeight的值来计算tableView的contentSize,tableView将调用- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath; 方法多次计算contentSize。 这就是为什么我不建议在方法中计算行高的原因- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath; 。 这将导致加载过程变慢。 幸运的是,如果tableview的值是estimateRowHeight,则通过累加每行的estimateRowHeight可以缩短计算过程。

我不是英语母语人士,我想通过发布博客来练习我的写作技巧。 如果本文语法错误,我很乐意予以纠正。 谢谢。