AutoLayout的systemLayoutSizeFittingSize仅适用于UILabels?

时间:2016-05-30 07:32:52

标签: ios uitableview autolayout uitableviewautomaticdimension

我只需要使用方法systemLayoutSizeFittingSize:UILayoutFittingCompressedSize制作一个自动高度计算的UITableViewCell。直到我的观点有UILabels和UIImageViews,一切都很好。当我需要用UIButton替换其中一个标签时,该方法无法正确计算尺寸。

我们是否需要向UILabels以外的UIElements提供一些额外的信息才能正常工作?

最后,我必须将TapGestures添加到UILabels才能使其正常工作。

这是单元格视图:

enter image description here

时间“09:00 AM”和位置是这里的标签,如果方法正确地给出了结果,这些可能是按钮。

这个想法很简单,创建一个可能的屏幕尺寸最小的单元xib(iPhone 3.5英寸)。在类中单独创建一个xib实例,向该实例提供信息(时间,位置等)并运行systemLayoutSizeFittingSize:UILayoutFittingCompressedSize方法来计算大小。

_scheduleCell = [[[UINib nibWithNibName:@"HomeScheduleViewCell" bundle:nil] instantiateWithOwner:nil options:nil] objectAtIndex:0];

 CGSize fullSize = [_scheduleCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

1 个答案:

答案 0 :(得分:1)

如果您使用的是自动布局,则应使用UITableViewAutomaticDimension。它会根据内容自动计算行的高度,因为它必须要求自动调整并正确设置约束。

Apple documentation所述,

  

要定义单元格的高度,您需要一个完整的约束链和视图(具有已定义的高度)来填充内容视图的上边缘和下边缘之间的区域。如果您的视图具有内在的内容高度,系统将使用这些值。如果没有,则必须将适当的高度约束添加到视图或内容视图本身。

您可以像使用

一样使用它
tableView.estimatedRowHeight = 85.0
tableView.rowHeight = UITableViewAutomaticDimension

通过这种方式,您可以使用按钮代替标签或任何对象。

主要是管理自动布局。它应该是不间断的约束链,这意味着第一个对象必须具有顶部约束,其中最后一个必须在单元格的内容视图中具有底部约束。

希望这会有所帮助:)