我有一个没有AutoLayout和Constraints的应用程序。我只在尺寸检查器中设置自动调整。在iOS 9和更早版本下工作都很好。在iOS 10下,自动调整功能不起作用,并将大小设置在屏幕之外。看下面的图片: 在模拟器中的iOS 10下
iPhone 5和iPhone 6 Plus也是如此。我能做些什么,自动调整工作正常。
编辑1: 另一种解决方法是将故事板设置为Xcode 7.x版本。您可以在 Interface Builder文档下的文件检查器中执行此操作。将打开选项设置为值 Xcode 7.x 。使用保存并关闭回答以下问题。如果您现在在iPad或iPhone上运行该项目,则所有具有UIScrollView的视图控制器都可以自动调整大小。
重要的: 这种解决方法在故事板中的每次更改后执行。
编辑2:我在苹果开发者论坛上发了一篇帖子,请看这里:https://forums.developer.apple.com/message/182716#182716
答案 0 :(得分:4)
这是Xcode 8中的一个错误,只需使用7.x版本来构建您的应用,然后它就会正常显示。
答案 1 :(得分:4)
首先,进入有问题的故事板,找到有问题的滚动视图,然后在属性中取消选中Autoresize Subviews。这将阻止Xcode自动撤消我们即将要做的所有事情。
其次,这是一个痛苦的部分,您需要在scrollview中修复视图的宽度并将它们返回到正确的设置。只需单击视图,找到右侧控制旋钮,然后将其拖回滚动视图内。
为了使下一步更容易,所有子视图应该位于滚动视图中嵌套的单个内容视图中。 (嵌套内容视图也是在scrollview中使用自动调整大小自动布局的“最佳实践”,因此请习惯它。)
请注意,如果您不首先取消选中Autoresize Subviews,那么Xcode将在您下次重新打开故事板时重新排列所有内容。
第三,您的代码需要IBOutlets用于滚动视图和内容视图。
最后,将以下内容添加到ViewController ...
- (void)viewDidLayoutSubviews
{
[self.scrollView setAutoresizesSubviews:YES];
CGRect frame = self.contentView.frame;
frame.size.width = self.view.frame.size.width - 20;
self.contentView.frame = frame;
[super viewDidLayoutSubviews];
}
基本上,我们重新启用自动调整大小,然后将内容视图的宽度设置为适当的宽度。在这里,我希望我的内容视图嵌套在具有10px边距的滚动视图中(因此为-20)。
需要对故事板中的每个违规滚动视图进行以上操作。
有点参与,只是权宜之计,但比使用自动布局进行全新布局更快。我能够在大约15分钟内用大约十几个场景和VC来修补故事板。使用自动布局重建所有内容会花费更多,更长时间。
请注意,这在最新的Xcode 8.1测试版中也没有修复。我很确定他们知道这个错误,但我也很确定这是Apple“鼓励”开发人员开始使用自动布局的方式。
答案 2 :(得分:2)
两种可能的解决方案,
答案 3 :(得分:0)
答案 4 :(得分:0)
根据我的测试,这个thread错误已在Xcode 8.1 Beta 2中修复。