问题与iOS 8自动布局(代码在iOS 7完美的作品)

我有一个使用auto-layout构build的应用程序,当我在iOS 7设备上运行它时,一切仍然按预期工作,但是当我在iOS 8设备上运行它时,我的某些约束会变得有点古怪。

我在另一个应用程序中遇到过类似的问题,但这不是一个大问题。 现在,我开始怀疑它是否是iOS 8 SDK中的错误,或者是否有处理iOS8中的自动布局的新方法,我不知道。

这里是我的设置:我有一个内置UIImageViewUIView 。 视图和图像视图都有约束它们底部的约束,以及常数= 0的超前视图。

UIView也有其顶部固定到其超视图,我有一个IBOutlet连接到约束,以便以编程方式进行调整。 UIImageView有第四个约束将其高度固定到设备的高度(在我的情况下是568)。

这是我期待/在iOS 7中实现的行为:我试图缩小容器视图的高度,并导致图像视图的顶部被切断而不改变宽高比(看起来像你裁剪closures图像的顶部)…这就是为什么我固定了图像视图的高度和底部边缘。

实际上在iOS8中发生了什么:容器视图按预期收缩(它保持固定在边和底部,高度缩小)。 UIImageView行为就好像它具有顶点空间约束,而且符号== 0。而不是切断图像的顶部,整个图像缩小。 由于我在AspectFit模式下显示图像,所以双面也会捏合以保持纵横比相同(但是imageView本身仍然固定在前导,尾部和底部边缘上)。

我该怎么做:我有一个通知,从我的代码的另一部分触发调整连接到IBOutlet的顶部空间约束。 它所调用的方法真的很简单:

 - (void) setTopSpaceForContainerView:(NSNotification*) notif{ containerView_TopSpace.constant = [[notif.userInfo objectForKey:kTopSpace] intValue]; [self.view setNeedsUpdateConstraints]; [self.view setNeedsLayout]; } 

其他人有类似的经历? 我试图find一个解决方法,但iOS 8似乎决心缩小我的形象。

万分感谢!

这绝对是一个iOS 8的错误。 我能够通过发送setNeedsLayout到容器视图(图像视图的超级视图)来解决它。

我看到你正在发送setNeedsLayoutself.view 。 如果该代码在你的视图控制器,那么我猜self.view不是容器视图。 尝试直接发送setNeedsLayout到容器视图。

演示项目在这里。

在这里输入图像说明

尝试使用UIViewContentModeScaleAspectFill和setClipsToBounds:NO