iOS版表格视图单元格自动高度自定义的子视图
我需要非常简单的事情 - 表格单元格自动检测自己的高度。这里有很多例子,基本上都是这样说的:“在桌子上设置几个标志和值,并在你的单元格中使用自动布局”。我的情况有点特别 - 我从单独的XIB文件加载单元格的内容,这是一个普通的UIView。第一个问题是当我在界面构建器中创建XIB文件时 - 我不知道如何根据我指定的约束使它成为“计算”的高度。我总是收到IB错误,除非我切换到“*格式”并将视图调整到与我的约束条件相匹配的高度。如果我不这样做,我会得到以下错误:iOS版表格视图单元格自动高度自定义的子视图
在上述例子中我只需要其高度将是32(图像高度)的图+ 2 * 16(垂直距离约束来自父母的顶部和底部的图像)加上边距。调整在IB的*视图,直到错误消失似乎是一个肮脏的黑客对我来说,这其实并没有自动布局。作为下一个步骤,我定义了一个电池类,在这里我把这个厦门国际银行看来,这样的事情(抱歉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
魔法?
我发现了什么是我的问题。实际上,由于自动调整,与添加的约束存在冲突。所以我改变了这条线(从上面的问题):
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;
到:
self.content.translatesAutoresizingMaskIntoConstraints = NO;
愚蠢的错误,translatesAutoresizingMaskIntoConstraints
标志应为孩子视图添加后被禁止,不为父母看法,因为我错误地做了。之后,具有细胞自动检测功能的魔法开始像魅力一样工作。
- 请确保
UILabel
具有多行属性。所以,设置0
为Line Property
在Attribute Inspector
。 - 确保
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; }