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

在Swift中,发生方向时如何更改表格单元格布局?,swift,swift2,Swift,Swift2,我有一个表格视图,我尝试在方向发生后通过更改自动布局约束以及单元高度来更改单元的布局 我在一个函数中更新新的约束,比如在一个cell类中更新setMyConstraints()。如果发生定向,我会尝试在单元格中调用setMyConstraints()insidelayoutSubViews() 但是,这不是正确的位置,因为调用了多个layoutSubViews(),其中一些视图在最后一个视图之前仍然使用旧的高度。以下是我在定向后跟踪的一些日志: cell layoutSubviews calle

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

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

但是,这不是正确的位置,因为调用了多个
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
更糟糕的是,如果我没有在第一个
布局子视图
之前清除所有约束,冲突可能已经发生了

因此,以下是所需的过程:

  • 设备方向发生变化

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

  • 单元视图将旋转并获取更新的高度

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

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


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

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


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

    您能用您提到的方法显示您的代码吗?
    heightforrowtaindexpath
    layoutSubviews
    setMyConstraints
    ?你在改变什么约束?没那么简单。我已经更新了我的问题。我试过你的主意,但失败了。如果你知道怎么做,请提供更详细的答案。谢谢