gpt4 book ai didi

ios - iOS 8 的自动布局问题,代码在 iOS 7 上运行良好

转载 作者:IT王子 更新时间:2023-10-29 07:57:49 26 4
gpt4 key购买 nike

我正在为 iPhone 和 iPad 开发应用程序。它支持 iOS6 和 iOS7,并且专门使用自动布局。

上周,当 Apple 宣布 iOS8 准备好迎接黄金时段时,我将我的一部 iPhone 和一部 iPad 都升级到了 iOS8。我还将我的 XCODE 升级到版本 6。我有第二部 iPhone,我留在 iOS7。

我使用 Xcode 6 生成了新的可执行文件,当我在运行 iOS8 的设备上执行时,看到它们的屏幕布局一团糟,但在 iOS7 上仍然正常,我感到很沮丧。在我的物理设备和 Xcode 的模拟器上都是如此。

这需要大量的挖掘,但我现在很清楚发生了什么,尽管我不知道为什么。

具体来说,某些自动布局操作在 iOS8 上对我来说失败了,但在 iOS7 上却没问题。

一些涉及按钮的示例,我将其放置在大小等于屏幕大小的基础 View 上:

(1) 如果我要求自动布局将按钮的水平中心 (CX) 定位为底层 View 的水平中心,结果是按钮的水平中心位于底层 View 的左边缘。

(2) 如果我要求自动布局使按钮的宽度等于基础 View 宽度的 50%,它根本没有宽度。

我可以通过以下方式解决这些问题:

(1) 我要求自动布局将按钮的中心定位为基础 View 的左边缘加上屏幕宽度的 50%。

(2) 我要求自动布局使按钮的宽度等于屏幕宽度的 50%。

我正在慢慢摸索自己的方式,使用这些变通方法,回到适用于我的 iOS7 和 iOS8 的自动布局代码。但我真的很想知道这里发生了什么。

看起来自动布局无法确定底层 View 的大小,因此需要该信息的自动布局计算失败。但它确实知道 View 的上边缘和左边缘在哪里,因此基于这些数据的计算会成功。

这是一个大型应用程序,我已经为 iOS6 和 iOS7 编写了数百行自动布局代码,它们非常适合我。

三天来,我一直在使用 iOS8 进行调整和尝试,但我并不比开始时更聪明。

有人对这里可能出现的问题有任何建议或想法吗?

最佳答案

@robmayoff 对此有一个很好的答案:https://stackoverflow.com/a/26066992/1424669

本质上,在 iOS8 中,您不能再在 View 上调用 setNeedsUpdateConstraintssetNeedsLayout 并期望更新 subview 的约束。

您必须在约束发生变化的 View 上调用这些方法。这向后兼容 iOS7。

示例:

假设您有一个带有 Root View self.view 的 ViewController 和一个名为 containerView 的 subview 。 containerView 有一个 NSLayoutConstraint 附加到它,你想改变它(在这种情况下,顶部空间)。

在 iOS7 中,您可以通过请求 Root View 的新布局来更新 VC 中的所有约束:

self.containerView_TopSpace.constant = 0;
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];

在 iOS8 中,您需要在 containerView 上请求布局:

self.containerView_TopSpace.constant = 0;
[self.containerView setNeedsUpdateConstraints];
[self.containerView setNeedsLayout];

关于ios - iOS 8 的自动布局问题,代码在 iOS 7 上运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25987244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com