我有一个使用了自动布局
的应用程序,当我在iOS 7设备上运行它时,一切都按预期工作,但是当我在iOS 8设备上运行它时,我的某些约束条件会出现一些问题。
我曾经在另一个应用程序中遇到过类似的问题,但那不是什么大问题。现在,我开始怀疑这是否是iOS 8 SDK中的一个bug,或者是否有一种我不知道的新的处理自动布局的方式。
这是我的设置:
我有一个UIView
,其中嵌入了一个UIImageView
。视图和图像视图都具有将它们的底部、前导和尾随边固定到其父视图的约束条件,常量为0。
UIView
还将其顶部边固定到其父视图,并且我已经连接了IBOutlet以便在编程时调整它。 UIImageView
具有第四个约束条件,将其高度固定为设备的高度(在我的情况下为568)。
这是我在iOS 7中期望/实现的行为: 我正在尝试缩小容器视图的高度,并使图像视图的顶部被裁剪而不改变宽高比(类似于从图像的顶部裁剪)...这就是为什么我将图像视图的高度和底部边缘固定的原因。
在iOS8中实际发生的情况:
容器视图按预期缩小(它保持固定在两侧和底部,高度缩小)。 UIImageView
的行为好像有一个上空间约束,constant == 0。它不是像我希望的那样裁剪掉图像的顶部,而是整个图像都缩小了。由于我将图像放置在AspectFit
模式下,侧面也会收缩以保持宽高比相同(但ImageView
本身仍然与前导、尾随和底部边缘固定)。
我的方法是: 我有一个通知从代码的另一部分触发,以调整连接到IBOutlet的顶部空间约束。它调用的方法非常简单:
- (void) setTopSpaceForContainerView:(NSNotification*) notif{
containerView_TopSpace.constant = [[notif.userInfo objectForKey:kTopSpace] intValue];
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
}
还有其他人有类似的经历吗?我正在尝试找到一种解决方法,但iOS 8似乎决定缩小我的图像。
非常感谢!