我有一个使用auto-layout
构建的应用程序,当我在iOS 7设备上运行时,一切仍然按预期工作,但是当我在iOS 8设备上运行它时,我的一些约束有点古怪。
我实际上在另一个应用程序中遇到了类似的问题,但这不是一个大问题。现在,我开始怀疑它是否是iOS 8 SDK中的一个错误,或者是否有一种新的方法来处理iOS8中我不知道的自动布局。
这是我的设置:
我有一个UIView
,其中嵌入了UIImageView
。视图和图像视图都有限制它们的底部,领先和&使用常量= 0
UIView
的上边缘也固定在其超视图上,我有一个IBOutlet连接到约束,以便以编程方式调整它。 UIImageView
有第四个约束,将其高度固定到设备的高度(在我的例子中为568)。
以下是我期望/在iOS 7中实现的行为: 我试图缩小容器视图的高度,并导致图像视图的顶部被切断而没有宽高比改变(看起来像你裁剪图像的顶部)...这就是为什么我已经固定了图像视图的高度和底边。
iOS8实际发生的事情:
容器视图按预期收缩(它保持固定在侧面和底部以及高度收缩)。 UIImageView
的行为好像它有一个顶部空间约束,其中cosntant == 0.而不是切断图像的顶部,整个图像缩小。由于我的图像处于AspectFit
模式,因此侧面也会捏合以保持纵横比相同(但imageView本身仍然固定在前导,后沿和底部边缘应该如此)。
我是怎么做到的: 我有一个通知,从我的代码的另一部分触发,以调整连接到IBOutlet的顶部空间约束。它调用的方法非常简单:
- (void) setTopSpaceForContainerView:(NSNotification*) notif{
containerView_TopSpace.constant = [[notif.userInfo objectForKey:kTopSpace] intValue];
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
}
其他人有类似的经历吗?我正试图找到一种解决方法,但iOS 8似乎决心缩小我的形象。
非常感谢!
答案 0 :(得分:10)
这绝对是iOS 8的错误。通过将setNeedsLayout
发送到容器视图(图像视图的超级视图),我能够解决它。
我发现您正在向setNeedsLayout
发送self.view
。如果该代码在您的视图控制器中,那么我猜self.view
不是容器视图。尝试直接将setNeedsLayout
发送到容器视图。
答案 1 :(得分:-1)
尝试使用UIViewContentModeScaleAspectFill和setClipsToBounds:NO