7

我有一个UITableViewCell使用 AutoLayout 的自定义标签。它的约束设置为内容视图的前导、尾随、底部和顶部空间。这些单元格出现的表格视图控制器位于UISplitViewController. 加载表格视图时,我使用以下代码计算单元格的高度:

CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
CGFloat height = size.height;

在纵向中,这使我可以正确显示单元格。这是部分单元格的屏幕截图:

在此处输入图像描述

但是,当我将 iPad 旋转到横向时,它没有计算正确的尺寸并最终填充太多:

在此处输入图像描述

在旋转内容视图的大小时调用时设置断点tableview:heightForRowAtIndexPath:未正确报告。事实上,它报告的是旧的、更窄的表格视图。

如何让我的单元格UISplitViewController在 iPad 上适当调整大小?

4

1 回答 1

3

UILabel#preferredMaxLayoutWidth 影响 systemLayoutSizeFittingSize。例如。您可以使用 Interface Builder 将 UILabel 放在视图上。

标签布局

  • superview的宽度是320px。
  • UILabel 的水平空间限制为 20px。

在这种情况下,UILabel#preferredMaxLayoutWidth 将设置为 280 像素。即使 Superview 的 frame.width 为 480px,systemLayoutSizeFittingSize 也会返回不超过 320px 的宽度。

解决方案之一是覆盖 CustomCell#setFrame 方法。

- (void)setFrame:(CGRect)frame {  
     [super setFrame:frame];  
     _label.preferredMaxLayoutWidth = frame.size.width - 20*2 /*Horizontal Spacing*/;   
}

然后在更新 label.text 时需要更新布局。

_customCell.label.text = @"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
[_customCell setNeedsLayout];
[_customCell layoutIfNeeded];
于 2013-12-21T13:06:39.473 回答