在 Swift 中,当方向发生时如何更改表格单元格布局?

Posted

技术标签:

【中文标题】在 Swift 中,当方向发生时如何更改表格单元格布局?【英文标题】:In Swift, how to change table cell layout when a orientation happens? 【发布时间】:2015-12-31 03:02:05 【问题描述】:

我有一个表格视图,我尝试在方向发生后通过更改自动布局约束和单元格的高度来更改单元格的布局。

我在一个函数中更新了新的约束,比如在一个单元类中setMyConstraints()。如果发生方向,我会尝试在单元格中的layoutSubViews() 中调用setMyConstraints()

但是,这不是正确的位置,因为多个layoutSubViews() 被调用,其中一些仍在使用旧高度,直到最后一个。以下是我在定向发生后跟踪的一些日志:

cell layoutSubviews called, frame.height = 69
tableview heightForRowAtIndexPath called, return height = 170
cell layoutSubviews called, frame.height = 69
cell layoutSubviews called, frame.height = 170

更糟糕的是,如果我不清理第一个 layoutSubViews 之前的所有约束,冲突可能已经发生。

因此,这里是需要的过程:

    设备方向发生

    清除单元格内视图的所有约束

    单元格视图旋转并获取更新后的高度

    为单元格内的视图添加更新的约束

我找不到合适的地方做 (2) 和 (4)。我尝试了几个想法,但都失败了,有些非常接近,但我仍然找不到合理/完美的地方。

换句话说,当方向发生时如何改变单元格布局(包括约束变化和单元格高度变化)?

【问题讨论】:

您能否在您提到的方法中显示您的代码 - heightForRowAtIndexPathlayoutSubviewssetMyConstraints?你要改变的限制是什么? 【参考方案1】:

UIView 有一个可以覆盖的updateConstraints() 函数。这是设置约束更改代码的好地方。

旋转后可能会自动调用该方法。但如果没有,您可以在轮换开始后或结束后立即向单元格发送setNeedsUpdateConstraints() 消息。

【讨论】:

没那么简单。我已经更新了我的问题。我试过你的想法,但我失败了。如果您确实知道如何操作,请提供更详细的答案。谢谢。

以上是关于在 Swift 中,当方向发生时如何更改表格单元格布局?的主要内容,如果未能解决你的问题,请参考以下文章

IOS 自定义表格单元格不会自动调整宽度以更改方向

当搜索栏成为第一响应者时更改表格 - swift

swift - 在UITableView中选择单元格时如何更改按钮名称?

如何根据标签文本快速更改表格视图单元格高度?

自定义表格单元格不符合 NilLiteralConvertible Swift Xcode 6 Beta 5

iText:我可以在渲染期间调整表格单元格的高度吗?