我想利用自动布局在iOS 8中自动处理我的单元格高度,但我讨厌估计的行高度如何使滚动(跳跃,滚动位置无法预测等)。
有没有办法不使用估算,以便表格视图预先计算所有行高度,就像它在iOS 7之前那样(不是太多单元格,所以不是性能问题),而是使用iOS 8自动计算高度?
答案 0 :(得分:3)
编辑:
如果不使用此属性,则无法使用动态大小调整。 estimatedRowHeight
告诉系统使用动态大小,假设您在单元格中使用了自动布局。
观看WWDC 2014视频226。
//
非常简单 - 在Storyboard中创建原型单元格,向superview top / bottom(又称单元格内容视图)添加约束,这意味着您的子视图具有顶部/底部约束,这些约束将会推动"推送"必要时的细胞大小。
使TableView和Cell高度都设置为Default。如果这个问题(自动布局需要的高度超过默认的44分),请确保在代码中执行此操作:
tableView.rowHeight = UITableViewAutomaticDimension
不要忘记设置estimatedRowHeight
以告诉系统您想要启用动态大小调整。
答案 1 :(得分:1)
自动调整大小要求您提供估计的行高,但您可以使用自动布局预先计算行高。
要做到这一点,你需要一个“虚拟”单元格,其中填充了你想要计算的单元格的数据。然后您可以使用自动布局为您完成工作:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
static YourCell *dummy = nil;
static NSLayoutConstraint *widthConstraint = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
UINib *nib = [UINib nibWithNibName:@"YourCell" bundle:nil];
dummy = [[nib instantiateWithOwner:nil options:nil] firstObject];
widthConstraint = [NSLayoutConstraint
constraintWithItem:dummy.contentView attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual toItem:nil attribute:
NSLayoutAttributeWidth multiplier:1.0 constant:320.0];
widthConstraint.priority = 750; //Good idea to lower priority of this constraint so it doesn't interfere with whatever table view sets internally
[dummy addConstraint:widthConstraint];
});
//account for current table view width
widthConstraint.constant = tableView.bounds.width;
//...
//Configure dummy cell here
//...
CGSize size = [dummy systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height;
}
答案 2 :(得分:1)
你可以使用
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
或
_activityTable.estimatedRowHeight = [CompanyEventCell cellHeight];