【问题标题】:Programmatic Autolayout changes inside UITableViewCell updated only after orientation changeUITableViewCell 内的编程自动布局更改仅在方向更改后更新
【发布时间】:2016-02-26 11:04:36
【问题描述】:

我有一个具有自动行高的UITableView 和一个自定义UITableViewCell。在UITableViewCell 中,我首先添加了一些带有编程自动布局约束的UIButtons。它们按照我的意愿完美定位。然后,在 3 秒后 (NSTimer),我删除所有这些 UIButtons 并重新添加不同数量的它们。 (例如,最初我有 4 个UIButtons,3 秒后,我删除了这 4 个 UIButtons 并添加了 3 个不同的。

最初

3 秒后

帖子轮换:

为什么会这样?我没有看到任何自动布局警告。此外,在方向改变后,一切都正确定位。是什么需要改变方向?我该如何手动强制执行此操作?(为此重新加载表格视图似乎太多了)

PS:我尝试使用setNeedsUpdateConstraintslayoutIfNeededlayoutSubviews,但无济于事。

这是UITableViewCell 代码:http://pastebin.com/TcHUXgDU。 (添加了一个 pastebin 以不污染这个空间)但基本上,我的 tableview 子类中有一个 configure: 方法,我在其包含 UITableViewcellForRowAtIndexPath 中调用它。此方法添加了这些约束。此外,在计时器触发后,(在另一个函数中)调用相同的代码,只是我添加的项目数与初始项目数不同。

这是我的UITableViewCell 布局:(仅顶部、底部、前导、尾随约束已添加到 UIView“Outerview”)

【问题讨论】:

  • 你能发布一些代码吗?并且在方向之前我可以看到单元格的高度是变化的,这使得按钮挤压到填充,而方向的改变通过改变单元格的高度使其可以。
  • 我已经发布了一些代码。此外,在定向之前,所有 3 个单元格的单元格高度都是恒定的。 (不像你说的变化)
  • 没有回答您的问题,但是如果您使用像 Masonry 这样的库,您将有更好的时间以编程方式实现自动布局

标签: ios objective-c iphone uitableview autolayout


【解决方案1】:

你需要重新加载 UITableView,这将重新计算单元格的高度

【讨论】:

  • 是的,这就像具有 uitableviewcell 布局高度的灵丹妙药,但我想知道是否有更便宜的方法来强制更新 uitableviewcell 布局。
  • - (void)reloadRowsAtIndexPaths:(NSArray * _Nonnull)indexPaths withRowAnimation:(UITableViewRowAnimation) 动画。查看 UITableView 的文档
  • 最终重新加载了tableview
猜你喜欢
  • 2013-09-15
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多