1

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

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

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

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

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

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

这似乎踢了堆栈视图并让它正确地重排视图。但是感觉比较俗气。

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

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

4

2 回答 2

0

您可能希望在第一次旋转和/或第一次旋转回原始方向时检查您的控制台。在我的情况下,我收到一条关于冲突约束的错误消息,iOS 破坏了我的一个约束(这是在约束冲突的情况下的默认行为)。

此外,检查您是否无意中为任何约束添加了不同大小类的约束常量。当我忘记将 Storyboard 放入 w: Any h: Any class 时,这种情况经常发生在我身上。

于 2015-12-31T18:31:56.580 回答
0

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

于 2016-01-06T05:29:26.757 回答