AutoLayout 的 systemLayoutSizeFittingSize 只适用于 UILabel?
Posted
技术标签:
【中文标题】AutoLayout 的 systemLayoutSizeFittingSize 只适用于 UILabel?【英文标题】:AutoLayout's systemLayoutSizeFittingSize works only with UILabels? 【发布时间】:2016-05-30 07:32:51 【问题描述】:我只需要使用systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
方法制作一个具有自动高度计算功能的 UITableViewCell。在我的视图有 UILabels 和 UIImageViews 之前,一切都很好。当我需要用 UIButton 替换其中一个标签时,该方法没有正确计算大小。
我们是否需要向 UIElements 提供一些额外的信息而不是 UILabels 才能正常工作?
最后,我不得不将 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];
【问题讨论】:
【参考方案1】:如果您使用自动布局,那么您应该使用UITableViewAutomaticDimension
。它会根据内容自动计算您的行高,但它必须需要 autolayoot 并正确设置约束。
正如Apple documentation 所说,
要定义单元格的高度,您需要一个完整的约束链和视图(具有定义的高度)来填充内容视图的顶部边缘和底部边缘之间的区域。如果您的视图具有内在的内容高度,系统将使用这些值。如果没有,您必须向视图或内容视图本身添加适当的高度约束。
你可以像这样使用它,
tableView.estimatedRowHeight = 85.0
tableView.rowHeight = UITableViewAutomaticDimension
这样你就可以用按钮代替标签或任何对象了。
主要是管理自动布局。它应该是完整的约束链,这意味着第一个对象必须具有顶部约束,而最后一个对象必须在单元格的内容视图中具有底部约束。
希望这会有所帮助:)
【讨论】:
感谢您的回答。但它是否记录在某处,systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
不包括 UIButton 而只包括 UILabel。因为,两种方法的代码/时间量是相同的。完整的约束链对它们都是相同的。
不,没有像 systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
这样的文档不包括 UIButton!我认为你在给出约束时一定犯了一些错误以上是关于AutoLayout 的 systemLayoutSizeFittingSize 只适用于 UILabel?的主要内容,如果未能解决你的问题,请参考以下文章