[英]iOS table view cell auto height with custom subview
我需要非常简单的东西-表格单元格可以自动检测其自身的高度。 这里有很多示例,这些示例基本上说“在表上设置几个标志和值,并在单元格中使用自动布局”。 我的情况有点特殊-我从单独的XIB文件(即普通的UIView)加载单元格的内容。 当我在界面构建器中创建该XIB文件时,第一个问题已经出现-我不知道如何根据我指定的约束条件使其高度来“计算”。 除非切换到“自由格式”并将视图的大小调整到与我的约束匹配的高度,否则我总是会出现IB错误。 如果我不这样做,将会出现以下错误:
在上面的示例中,我只需要一个视图,该视图的高度将为32(图像高度)+ 2 * 16(图像距父对象顶部和底部的垂直距离约束)加上页边距。 在IB中调整自由格式视图的大小,直到错误消失,对我来说似乎是一个肮脏的技巧,并且实际上不是自动布局。 下一步,我定义一个单元格类,在其中放置这个xib视图(类似于objc代码,将项目移植到swift几乎完成了) :
- (void)awakeFromNib {
[super awakeFromNib];
[[NSBundle mainBundle] loadNibNamed:@"CellContent" owner:self options:nil];
// self.content is an outlet which gets the root of the XIB on load
[self.contentView addSubview:self.content];
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView.leftAnchor constraintEqualToAnchor:self.content.leftAnchor].active = YES;
[self.contentView.rightAnchor constraintEqualToAnchor:self.content.rightAnchor].active = YES;
[self.contentView.topAnchor constraintEqualToAnchor:self.content.topAnchor].active = YES;
[self.contentView.bottomAnchor constraintEqualToAnchor:self.content.bottomAnchor].active = YES;
}
您可能会猜到,当我运行此程序时,像元高度是较大的自由格式,就像在内容XIB的IB中一样,因此没有自动布局。 似乎自由形式的高度甚至被添加为另一个约束,并且存在约束冲突,导致其中一些在运行时被破坏。
让我知道如何解决此问题,轻松地为具有自动高度的单元格创建内容视图,并且可以将其嵌入到单元格中,以使tableView.rowHeight = UITableViewAutomaticDimension
魔术受益匪浅?
也许您忘记设置标签的“ 内容拥抱优先级”和“ 内容压缩保留优先级 ”。 在此处输入图片说明
UILabel
具有multiline属性。 因此,在Attribute Inspector
Line Property
设置为0
。 UILabel
Auto-Layout
相对于Left-Right-Top-Bottom
。 应用这些委托函数:
-(CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; }
我发现了我的问题所在。 实际上,由于自动调整大小,添加的约束存在冲突。 所以我改变了这一行(从上面的问题):
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;
至:
self.content.translatesAutoresizingMaskIntoConstraints = NO;
愚蠢的错误,应该在添加后为子视图(而不是父视图)禁用translatesAutoresizingMaskIntoConstraints
标志,而不是像我错误地那样。 此后,具有单元格自动高度检测功能的魔术开始像魅力一样起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.