【问题标题】:Unable to set the height of a prototype cell as a constraint in storyboard无法将原型单元格的高度设置为情节提要中的约束
【发布时间】:2016-08-02 12:09:07
【问题描述】:

如何使用情节提要为原型单元格的高度添加约束?

在下面的第一个屏幕截图中,我使用情节提要的“重置为选定约束”来根据画布自动设置它们。我在视图控制器级别和视图级别都尝试了它。但结果在每种情况下都是相同的 - 它只添加了屏幕截图中可以看到的少数约束,并且当代码运行时,蓝色单元格显示的高度与红色单元格相同)。

如果我现在尝试为单元格的高度添加一个额外的显式约束,它不会让我这样做 - 该选项是灰色的。

如果我删除所有约束并尝试手动添加它们,添加它们的选项仍然被禁用 - 为什么会这样?有关示例,请参见下面的屏幕截图。 如果我选择 Content View 来设置相同的约束,而不是像屏幕截图中那样选择 headerCall,即禁用设置它们的能力。

我只是想添加原型单元格,其中一种类型代表一个狭窄的节标题,另一种类型代表一个更宽的数据内容单元格,但代码并没有说明为什么我不能。 (我没有类似的问题与任何其他视图控制器/视图设置约束,只是这些原型单元)。

视图控制器中没有代码设置任何高度或约束等。它实际上是空的,我创建它只是为了重新创建问题。

【问题讨论】:

    标签: ios xcode uitableview autolayout


    【解决方案1】:

    实际上约束不应该直接应用于 UITableViewCell 的内容视图,因为它们已经充当动态包装器并根据它们的子视图调整它们的高度。

    尝试将子视图添加到内容视图并为该子视图设置高度约束。同时将新子视图的所有方面都固定到内容视图。

    如果您希望单元格的高度是静态的,那么请覆盖下面的代码并让您的 viewController 实现 UITableViewDelegate:

    override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat
    

    或者,如果您希望根据刚刚应用于内容视图子视图的高度约束计算单元格高度,则在这种情况下使用:

     self.tableView.rowHeight = UITableViewAutomaticDimension;
    

    【讨论】:

    • 为了在 iOS 11/XCode 9.3 上运行,我必须设置子视图的高度并将其垂直居中。由于某种原因,将顶部和底部固定到内容视图而不是居中不起作用。
    【解决方案2】:

    您不能对单元格设置约束。您可以对其 contentView 设置约束。并从尺寸检查器中设置单元格的高度。如果您想要单元格的动态大小,那么您可以使用

    self.tableView.estimatedRowHeight = 44.0; 
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    

    但是您必须为此使用自动布局。希望这会帮助你。 :)

    【讨论】:

      【解决方案3】:

      我认为我们不能为 UITableViewCell 设置约束。以编程方式设置约束的唯一方法。你可以写

      -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
       {
          //...
       }
      

      在这里,您可以为不同的行指定两个高度。

      【讨论】:

        猜你喜欢
        • 2012-11-19
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        相关资源
        最近更新 更多