我有一个视图控制器,其中包含一个UITableView实例,并使用自动布局约束来呈现它。我希望在这个表格视图中拥有可变的单元格高度。我不想自己计算单元格高度,因为我的复杂单元格内容由几个标签和图片组成,而这些内容在每个单元格中都可能不同。我相信可以让自动布局单元格自行调整大小,以容纳所有子视图(即在标签分配文本后使用sizeToFit方法?)。
我有一个自定义单元格类,它使用自动布局的可视化约束格式来定位其子视图。我尝试将此处提出的方法和其示例实现此处融合进去。
当我初始化表格视图时,我创建了一个与我的数据行长度相等的数组,并通过为MyCustomCell类型的原型单元格分配值并检索其高度来计算每行的高度。
我的自定义单元格的限制条件如下:
我有一个自定义单元格类,它使用自动布局的可视化约束格式来定位其子视图。我尝试将此处提出的方法和其示例实现此处融合进去。
当我初始化表格视图时,我创建了一个与我的数据行长度相等的数组,并通过为MyCustomCell类型的原型单元格分配值并检索其高度来计算每行的高度。
[cell systemLayoutSizeFittingSize:UILayoutFittingExpandedSize].height
将其存储在heights数组中,以便稍后在表视图的heightForRowAtIndexPath方法中使用,以检索单个单元格的正确高度。
然而,执行所有这些操作后,我在xCode中遇到了无法阅读的异常NSInternalInconsistencyException,显示“Cannot find an outgoing row head for incoming head MyCustomCell:0xa8a1430.Width, which should never happen.”
这是自定义单元格中子视图的初始化:
_titleLabel = [[UILabel alloc] init];
_titleLabel.font = [TSTheme boldThemeFontOfSize:TSThemeFontSizeSmall];
_titleLabel.textColor = [[TSTheme sharedTheme] darkTextColor];
_titleLabel.backgroundColor = [UIColor clearColor];
_titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
_titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:19];
_titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
[self.contentView addSubview:_titleLabel];
_summaryLabel = [[UILabel alloc] init];
_summaryLabel.font = [TSTheme boldThemeFontOfSize:TSThemeFontSizeSmall];
_summaryLabel.backgroundColor = [UIColor clearColor];
_summaryLabel.textColor = [[TSTheme sharedTheme] darkTextColor];
_summaryLabel.translatesAutoresizingMaskIntoConstraints = NO;
_summaryLabel.numberOfLines = 0;
_summaryLabel.preferredMaxLayoutWidth = 250.0f; // required for text wrapping
_summaryLabel.font = [UIFont fontWithName:@"Georgia" size:14];
_summaryLabel.lineBreakMode = NSLineBreakByWordWrapping;
[self.contentView addSubview:_summaryLabel];
_thumbnailView = [[UIImageView alloc] init];
_thumbnailView.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addSubview:_thumbnailView];
我的自定义单元格的限制条件如下:
NSDictionary *views = NSDictionaryOfVariableBindings(_titleLabel, _summaryLabel, _thumbnailView);
NSDictionary *metrics = @{@"margin": @"5"};
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(margin)-[_thumbnailView(<=60)]-(margin)-[_titleLabel]-(margin)-|"
options:0
metrics:metrics
views:views]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(margin)-[_thumbnailView]-(margin)-|"
options:0
metrics:metrics
views:views]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(margin)-[_titleLabel]-(0)-[_summaryLabel]"
options:0
metrics:metrics
views:views]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(margin)-[_thumbnailView]-(margin)-[_summaryLabel]-(margin)-|"
options:0
metrics:metrics
views:views]];