UIStackView rotation/constraint 错误

UIStackView rotation/constraint bug

我有一个 UIStackView,它是使用自动布局的位置。当屏幕旋转时,我停用并激活各种约束以将堆栈视图移动到我想要的位置。

我已经使用 Reveal 进行了检查,以确保堆栈视图的位置正确而且确实如此。

在堆栈视图中,我有多个视图,堆栈视图的对齐方式设置为填充,以确保它们扩展以填充堆栈视图的宽度。这工作正常,除了...

当我旋转设备时,然后旋转回原来的方向。然后堆栈视图被正确定位,但其中的视图却没有。他们没有填充堆栈视图,而是在侧面留下了一个空隙。通常介于 20 到 50 点之间。但在同一台设备上总是相同的数量。

这让我很困惑。我发现让堆栈视图正确填充旋转回来的唯一解决方案是:

override func viewDidLayoutSubviews() {
    sliders.alignment = UIStackViewAlignment.Bottom
    sliders.alignment = UIStackViewAlignment.Fill
}

这似乎启动了堆栈视图并使其正确重排视图。但是感觉比较俗气

有没有人遇到过这个bug并找到了更好的解决方案?

我已经围绕 setNeedsLayout()、setNeedsDisplay() 等尝试了各种方法。但是到目前为止,只有上面的代码解决了这个问题。

你可能想在第一次旋转时检查你的控制台and/or第一次旋转回到原来的方向。在我的例子中,我收到一条关于约束冲突的错误消息,并且 iOS 打破了我的一个约束(这是约束冲突情况下的默认行为)。

此外,请检查您是否无意中为任何约束添加了不同大小的约束常量 class。当我忘记将 Storyboard 放入 w: Any h: Any class.

时,我经常会遇到这种情况

好的,最新的 SDK 问题似乎已经消失了。所以一定是 Apple 修复了。