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

iOS 8上的自动布局问题(代码在iOS 7上完美工作),ios,objective-c,autolayout,ios8,Ios,Objective C,Autolayout,Ios8,我有一个应用程序,它是使用自动布局构建的,当我在iOS 7设备上运行它时,一切都像预期的那样工作,但是当我在iOS 8设备上运行它时,我的一些限制变得有点古怪 实际上,我在另一个应用程序中遇到了类似的问题,但这不是什么大问题。现在,我开始怀疑这是IOS8SDK中的一个bug,还是iOS8中有一种我不知道的处理自动布局的新方法 以下是我的设置: 我有一个UIView,其中嵌入了UIImageView。视图和图像视图都具有将其底部、前缘和后缘固定到其SuperView的约束,常数为0 ui视图的上边

我有一个应用程序,它是使用
自动布局构建的,当我在iOS 7设备上运行它时,一切都像预期的那样工作,但是当我在iOS 8设备上运行它时,我的一些限制变得有点古怪

实际上,我在另一个应用程序中遇到了类似的问题,但这不是什么大问题。现在,我开始怀疑这是IOS8SDK中的一个bug,还是iOS8中有一种我不知道的处理自动布局的新方法

以下是我的设置: 我有一个
UIView
,其中嵌入了
UIImageView
。视图和图像视图都具有将其底部、前缘和后缘固定到其SuperView的约束,常数为0

ui视图
的上边缘也固定在superview上,我有一个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似乎决心缩小我的形象


非常感谢

尝试使用UIViewContentModeScaleAspectFill和setClipsToBounds:NO

这肯定是一个iOS 8错误。我可以通过将
setNeedsLayout
发送到容器视图(图像视图的超级视图)来解决这个问题

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


我遇到了一些问题,可能与此有关:我的应用程序在iOS7上运行良好,在iOS8上出现问题。我还在研究这个问题,但还没有天亮。和scrollview一样的船:没有答案是的,直到有相同的问题:/It work+1更多,因为它也向后兼容iOS 7。这让我想知道,在iOS7中,在根视图上调用
setNeedsUpdateConstraints
setNeedsLayout
会自动向下延伸到所有子视图。现在我们需要调用setNeedsLayout,特别是在约束发生变化的视图上…这似乎可以减少不必要的布局计算并加快速度。我应该一直这样做吗?我不认为它是像你想的那样滴下来的。我认为在iOS 7中,更改约束常量会将受约束视图标记为需要布局(或以其他方式触发约束解算器),而在iOS 8中则不会。是的,这很有意义。听起来是时候让我们中的许多人去修复所有的
setNeedsLayout
调用,以指向具有不断变化的约束的视图。我真的很兴奋能在我的问题上尝试一下,看看事情是否会解决:如果是这样,我会回来标记这只小狗!雷达已经被苹果公司发现并修复。这是一个iOS 8错误。更多详情请参见此处: