我尝试使用autolayout动态确定我的表格单元格的高度使用本教程http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout
问题是,我得到了这些奇怪的自动约束,将维度设置为我的自定义单元格的模拟指标。我做了很多自动布局,我认为模拟的指标不应该在运行时影响实际的应用程序。新SDK中有什么变化吗?
无论如何,这是我一直在搞乱的方法......
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static JMSocialFeedTableViewCell *sizingCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sizingCell = [self.tableView dequeueReusableCellWithIdentifier:@"cell"];
});
[self configureCell:sizingCell forIndexPath:indexPath];
//[sizingCell.contentView addConstraint:[NSLayoutConstraint constraintWithItem:sizingCell.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:0 constant:self.tableView.frame.size.width]];
[sizingCell setNeedsLayout];
[sizingCell layoutIfNeeded];
//CGSize size = [sizingCell.contentView sizeThatFits:CGSizeMake(self.tableView.frame.size.width, CGFLOAT_MAX)];
CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height + 1.0f; // Add 1.0f for the cell separator height
}
注释掉的线条是我尝试的不同的东西。我的模拟指标是300 x 389.即使表格视图宽度为320,sizeThatFits方法也会返回此大小。无论出于何种原因,systemLayoutSizeFittingSize返回400 x 489。在这些情况下,我很容易理解为什么我会得到不可满足的约束,因为高度应该是409(对于分隔符而言,+ 1.0F也许。我一直在尝试使用和不使用它)。
我没有在代码中设置任何其他约束,但如果我尝试添加我在上面的代码中评论的那个,我就会得到这个奇怪的约束......
"<NSLayoutConstraint:0x1701ebf0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x1705a310(300)]>"
我不知道为什么数字300不断出现。我认为一旦视图布局,模拟指标就会消失。
很抱歉,如果我的问题没有100%明确。我想我在几点上感到困惑。基本上我试图通过自动布局来确定我的单元格的正确高度,因为单元格的宽度应该等于表格视图的宽度(在设备I上测试的是320)上)。