【发布时间】:2018-06-27 07:47:17
【问题描述】:
我的约束在 UITableViewCell 中不起作用,但如果我在设备之间切换并进行旋转,则没有警告并且布局在界面生成器中起作用。
我做了什么:
我创建了一个名为 SearchResultCell 的 UITableViewCell。我想在右侧布局一个按钮,在左侧布局两个标签,标签应该水平填充整个空间,直到按钮。
最初,我只是将视图放在那里 - 无论我定义了哪些约束 - 在模拟器中,所有视图总是出现在左上角。
然后我尝试将它们嵌入到堆栈视图中。这两个标签进入一个垂直堆栈视图,然后我将其与按钮一起放入一个水平堆栈视图。然后我定义了约束,使得最外面的堆栈视图应该填充整个超级视图,即我将底部、尾随、顶部和前导约束设置为 0。
同样,在界面生成器中它始终正确显示:
Layout works correctly in interface builder
但是,一旦启动,这些限制似乎并没有被应用。
How it looks like in simulator
唯一的(轻微的)改进是现在按钮位于标签旁边,这要归功于堆栈视图。但无论我尝试什么,我都无法在这个 UITableViewCell 中得到约束。
我在这里做错了什么?没看到。
【问题讨论】:
-
听起来您正在做您需要做的事情...您确定您在 cellForRowAt 中引用了正确的单元格类吗?
-
我正在使用带有正确标识符的 dequeueReusableCell。
-
看看:stackoverflow.com/questions/18746929/…。它对使用动态(自定大小)单元格有非常详细的答案。
-
我读过那篇文章。幸运的是,我不需要自行调整大小的单元格,因为我的表格视图中的所有单元格都将具有相同的布局,因此具有相同的行高。另一个关键点是:“不要将子视图固定到单元格本身;只固定到单元格的 contentView” - 这正是我所做的,我验证了它。所以我能做的最后一件事是遵循“在代码中设置约束”的建议,我也通过覆盖 updateConstraints() 来做到这一点,但行为仍然没有改变。我无法让堆栈视图填充我的 UITableViewCell 的整个内容视图。
标签: xcode uitableview autolayout constraints