iOS 8上的自动布局问题(代码在iOS 7上完美运行)

BFa*_*Far 19 objective-c ios autolayout ios8

我有一个使用的应用程序,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];
}
Run Code Online (Sandbox Code Playgroud)

其他人有类似的经历吗?我正在尝试找到一种解决方法,但iOS 8似乎决心缩小我的图像.

万分感谢!

rob*_*off 10

这肯定是iOS 8的错误.我能够通过发送setNeedsLayout到容器视图(图像视图的超级视图)来解决它.

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

演示项目就在这里.

在此输入图像描述

  • 该雷达已被苹果公司收录并修复.这是一个iOS 8的bug.请参阅https://twitter.com/mairwatching/status/517747734564990976以下是更多详细信息:https://twitter.com/mairwatching/status/517748417452208129 (4认同)