【问题标题】:Adjusting Subclassed UITableViewCell UILabel Frame调整子类化 UITableViewCell UILabel 框架
【发布时间】: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


【解决方案1】:

如果不使用约束,请去掉use auto layout,使用size class。

【讨论】:

  • 这将是整个项目,对吧?我在另一个屏幕上使用了约束,它很曲折。我已经向 Paulw11 提到我在当前屏幕上使用了约束,并且无法实现正确的间距。如果我有一个数字,那么按钮和数字之间的空间比我想要的要多。那么有没有办法在一个屏幕上而不是另一个屏幕上使用自动布局?如果它确实是项目范围的,那么如果我不使用自动布局,那么我将丢弃另一个屏幕上的工作,如果我使用它,我将丢弃我为当前屏幕所做的工作。
  • 如果我不得不在其他地方禁用自动布局,这不是一个好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 2010-11-03
相关资源
最近更新 更多