问题与iOS 8自动布局(代码在iOS 7完美的作品)
我有一个使用auto-layout
构build的应用程序,当我在iOS 7设备上运行它时,一切仍然按预期工作,但是当我在iOS 8设备上运行它时,我的某些约束会变得有点古怪。
我在另一个应用程序中遇到过类似的问题,但这不是一个大问题。 现在,我开始怀疑它是否是iOS 8 SDK中的错误,或者是否有处理iOS8中的自动布局的新方法,我不知道。
这里是我的设置:我有一个内置UIImageView
的UIView
。 视图和图像视图都有约束它们底部的约束,以及常数= 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
到容器视图(图像视图的超级视图)来解决它。
我看到你正在发送setNeedsLayout
到self.view
。 如果该代码在你的视图控制器,那么我猜self.view
不是容器视图。 尝试直接发送setNeedsLayout
到容器视图。
演示项目在这里。
尝试使用UIViewContentModeScaleAspectFill和setClipsToBounds:NO
- 我如何做到这一点,如果我淡出我的导航栏,然后实际上隐藏它的程序,如果我撤消这没有时间问题?
- 如何使用自动布局在UIPageViewController中定位子视图?
- UIImageView / UIView的Autolayout宽高比
- 移动视图与约束
- 如何在界面构build器中对视图进行约束来满足Xcode 8中的所有iphone屏幕
- UICollectionView iOS 9在支持RTL语言的项目上发布
- 每当我的应用程序启动时,为什么我会在执行“-layoutSubviews”后仍然需要“自动布局”?
- 如何在iOS的自动布局中设置视图的dynamic宽度和高度?
- 在UITableViewCell中加载UIView的Nib文件不能拉伸