【问题标题】:AutoLayout's systemLayoutSizeFittingSize works only with UILabels?AutoLayout 的 systemLayoutSizeFittingSize 只适用于 UILabel?
【发布时间】: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];

【问题讨论】:

    标签: ios uitableview autolayout uitableviewautomaticdimension


    【解决方案1】:

    如果您使用自动布局,那么您应该使用UITableViewAutomaticDimension。它会根据内容自动计算您的行高,但它必须需要 autolayoot 并正确设置约束。

    正如Apple documentation 所说,

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

    你可以像这样使用它,

    tableView.estimatedRowHeight = 85.0
    tableView.rowHeight = UITableViewAutomaticDimension
    

    这样你就可以用按钮代替标签或任何对象了。

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

    希望这会有所帮助:)

    【讨论】:

    • 感谢您的回答。但它是否记录在某处,systemLayoutSizeFittingSize:UILayoutFittingCompressedSize 不包括 UIButton 而只包括 UILabel。因为,两种方法的代码/时间量是相同的。完整的约束链对它们都是相同的。
    • 不,没有像 systemLayoutSizeFittingSize:UILayoutFittingCompressedSize 这样的文档不包括 UIButton!我认为你在给出约束时一定犯了一些错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2021-08-05
    • 2014-11-04
    相关资源
    最近更新 更多