我只需要使用方法systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
制作一个自动高度计算的UITableViewCell。直到我的观点有UILabels和UIImageViews,一切都很好。当我需要用UIButton替换其中一个标签时,该方法无法正确计算尺寸。
我们是否需要向UILabels以外的UIElements提供一些额外的信息才能正常工作?
最后,我必须将TapGestures添加到UILabels才能使其正常工作。
这是单元格视图:
时间“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];
答案 0 :(得分:1)
如果您使用的是自动布局,则应使用UITableViewAutomaticDimension
。它会根据内容自动计算行的高度,因为它必须要求自动调整并正确设置约束。
要定义单元格的高度,您需要一个完整的约束链和视图(具有已定义的高度)来填充内容视图的上边缘和下边缘之间的区域。如果您的视图具有内在的内容高度,系统将使用这些值。如果没有,则必须将适当的高度约束添加到视图或内容视图本身。
您可以像使用
一样使用它tableView.estimatedRowHeight = 85.0
tableView.rowHeight = UITableViewAutomaticDimension
通过这种方式,您可以使用按钮代替标签或任何对象。
主要是管理自动布局。它应该是不间断的约束链,这意味着第一个对象必须具有顶部约束,其中最后一个必须在单元格的内容视图中具有底部约束。
希望这会有所帮助:)