【发布时间】:2016-07-14 10:28:57
【问题描述】:
我有一个子类 UITableViewCell。在情节提要中,我添加了一些标签和按钮并创建了各自的插座,并使用尺寸检查器设置和调整了它们各自的框架。 iPhone 6 的布局看起来不错。在 iPhone 5 上,右边的东西不在屏幕上。在 UITableView 子类的 layoutSubviews 方法中,我尝试调整标签和按钮的框架。当 tableview 首次出现时,按钮和标签位于 Storyboard 中为它们各自的框架指定的位置,而不是我在 layoutSubviews 中设置的框架/位置。片刻之后,它们出现在 layoutSubviews 中设置的位置。但有时,我会看到它恢复到旧的故事板设置位置。
任何想法可能会发生什么?我想明确设置标签和按钮框架,并让它们留在我放置的位置。我不想使用约束,因为它们在 Storyboard 中使用起来真的很痛苦,而且经常表现不佳或没有很好的粒度。
【问题讨论】:
-
可能与细胞复用流程有关?与其继承
UITableView来覆盖layoutSubviews(),不如尝试在单元重用之前调整框架? (tableView(_:cellforRowAtIndexPath:))。 -
不要调整帧。设置约束和自动布局将完成其余的工作
-
如果我不子类化,我如何拥有一个带有按钮和标签的自定义单元格?我不只是为了覆盖 layoutSubviews 子类化。我有一个包含多个自定义单元格的表格视图。
-
@Paulw11 我不想使用约束。当我尝试使用它们时,我得到的结果很差。例如,我有一个带有时钟图像的按钮和一个在其右侧显示分钟的文本标签。我想要它们之间非常完美的间距。如果标签显示的是一位数而不是两位数,则使用约束的间距并不紧密,而与框架一样。顺便说一句,故事板没有显示您所看到的是放置物品时获得的间距。不得不不断地猜测和编译是非常令人沮丧的。人们会认为苹果可以做得更好。
-
因为默认情况下,storyboard 是基于 Autolayout,而不是 springs/struts/frames。您可以转到情节提要的属性并取消选中“使用自动布局”。你可以用框架做的任何事情都可以用自动布局来做。在您的时钟示例中,您可以使用约束来修复标签的位置和大小,并获得与设置框架完全相同的结果,因为这实际上是您正在做的事情
标签: ios uitableview