Gal*_*mon 24 ios autolayout ios8
我正在为iPhone和iPad开发应用程序.它支持iOS6和iOS7,并且它仅使用自动布局.
上周,当Apple宣布iOS8已经准备好迎接黄金时段时,我将其中一部iPhone和iPad升级到了iOS8.我还将我的XCODE提升到版本6.我有第二部iPhone,我在iOS7上留下了.
我用Xcode 6生成了新的可执行文件,当我在运行iOS8的设备上执行时,我看到他们的屏幕布局搞砸了,但在iOS7上仍然很好.在我的物理设备和Xcode的仿真器上都是如此.
虽然我不知道为什么,但我现在已经很清楚了解发生了什么.
具体来说,iOS8上的某些自动布局操作失败了,但在iOS7上它们没问题.
一些涉及按钮的示例,我将其放置在基本视图上,其大小等于屏幕大小:
(1)如果我要求自动布局将按钮的水平中心(CX)定位为等于基础视图的水平中心,则结果是按钮的水平中心位于基础视图的左边缘.
(2)如果我要求自动布局使按钮的宽度等于底层视图宽度的50%,则它根本没有宽度.
我能够解决这些问题如下:
(1)我要求自动布局将按钮的中心定位为等于底层视图的左边缘加上屏幕宽度的50%.
(2)我要求自动布局使按钮的宽度等于屏幕宽度的50%.
我正在慢慢地抓住我的方式,使用类似这样的解决方法,回到在iOS7和iOS8上适用于我的自动布局代码.但我真的很想知道这里发生了什么.
看起来自动布局无法确定基础视图的大小,因此需要该信息失败的自动布局计算.但它确实知道视图的顶部和左侧边缘在哪里,因此基于这些数据的计算成功.
这是一个大型应用程序,我已经为iOS6和iOS7编写了数百行自动布局代码,对我来说非常适合.
我一直在调试并尝试使用iOS8三天,而且我开始时并不比我更聪明.
任何人对这里的问题有什么建议或想法?
BFa*_*Far 11
@robmayoff对此有一个很好的答案:https://stackoverflow.com/a/26066992/1424669
从本质上讲,在iOS8上可以不再调用setNeedsUpdateConstraints和setNeedsLayout一个视图,并期望子视图的限制更新.
您必须在约束正在更改的视图上调用这些方法.这与iOS7向后兼容.
例:
假设您有一个带有根视图的ViewController self.view和一个名为containerView的子视图.containerView NSLayoutConstraint附加了一个您想要更改的内容(在本例中为顶部空间).
在iOS7中,您可以通过为根视图请求新布局来更新VC中的所有约束:
self.containerView_TopSpace.constant = 0;
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)
在iOS8中,您需要在containerView上请求布局:
self.containerView_TopSpace.constant = 0;
[self.containerView setNeedsUpdateConstraints];
[self.containerView setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)
您可能会发现这个问题的答案很有帮助:UICollectionView cell subviews do not resize
在大多数情况下,在 iOS7 中有效,但在 iOS 8 上无效,自动布局问题似乎源于 iOS 8 中根视图的大小不正确,特别是当我们将 TranslatesAutoresizingMaskIntoConstraints 设置为 NO 时。对于我的视图,我能够在layoutSubviews(或具有正确边界的任何适当的初始值设定项)中设置根视图的框架,这解决了问题。
self.contentView.frame = CGRectInset(self.bounds, 0, 0);
Run Code Online (Sandbox Code Playgroud)
如上面的答案所示,你也可以这样做
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
Run Code Online (Sandbox Code Playgroud)
然后在开始在代码中设置自己的约束之前,将translatesAutoresizingMaskIntoConstraints 转回NO。
绝对讨厌我们这么多时间都花在这些烦人的问题上。
| 归档时间: |
|
| 查看次数: |
13321 次 |
| 最近记录: |