在iOS 10下自动调整不起作用
我有一个没有AutoLayout和Constraints的应用程序。 我只在尺寸检查器中设置自动调整。 在iOS 9和更早版本下工作都很好。 在iOS 10下,自动调整function不起作用,并将大小设置在屏幕之外。 请看下面的图片:在模拟器中的iOS 10下
iPhone 5和iPhone 6 Plus也发生了同样的情况。 我能做些什么,自动调整工作正常。
编辑1:另一种解决方法是将故事板设置为Xcode 7.x版本。 您可以在Interface Builder Document下的File Inspector中执行此操作。 设置选项打开到Xcode 7.x值。 使用保存并关闭回答以下问题。 如果您现在在iPad或iPhone上运行该项目,则使用UIScrollView的所有视图控制器都可以自动resize。
重要提示:此故障排除方法是在故事板中的每次更改后执行。
编辑2:我在苹果开发者论坛上发了一篇post,请看这里: https : //forums.developer.apple.com/message/182716#182716
这是Xcode 8中的一个错误,只需使用7.x版本来构建您的应用程序,然后它将正常显示。
首先,进入有问题的故事板,找到有问题的滚动视图,并在属性中取消选中Autoresize Subviews。 这将阻止Xcode自动撤消我们即将要做的所有事情。
其次,这是一个痛苦的部分,您需要在scrollview中修复视图的宽度并将它们返回到正确的设置。 只需单击视图,找到右侧控制旋钮,然后将其拖回滚动视图内。
为了使下一步更容易,所有子视图应该位于滚动视图中嵌套的单个内容视图中。 (嵌套内容视图也是在scrollview中使用自动resize自动布局的“最佳实践”,因此请习惯它。)
请注意,如果您不首先取消选中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]; }
基本上,我们重新启用自动resize,然后将内容视图的宽度设置为适当的宽度。 在这里,我希望我的内容视图嵌套在具有10px边距的滚动视图中(因此 – 20)。
需要对故事板中的每个违规滚动视图进行上述操作。
有点参与,只是一个权宜之计,但比使用自动布局进行全新布局更快。 我能够在大约15分钟内用大约12个场景和VC来修补故事板。 使用自动布局重建所有内容会花费很多很长时间。
请注意,这在最新的Xcode 8.1测试版中也没有修复。 我很确定他们知道这个错误,但我也很确定这是Apple“鼓励”他们的开发人员开始使用自动布局的方式。
两种可能的方案,
- 修改图像中显示的autoresizingmask,它不是100%理想,因为没有正确的填充,但它会工作。
- 设置文本字段的框架,即
CGRectMake(padding, y, self.view.frame.size.width-padding*2, height)
,这不是很好,因为你需要为每个文本字段执行此操作,但同样将工作:p。
不幸的是,我不确定为什么文本字段的宽度达到1000+,当你设置它像iOS 10一样,它可能与scrollview有关,我测试它没有scrollview它按预期工作。
您可以从尺寸检查器更改视图控制器的模拟尺寸。 转到尺寸检查器并将模拟尺寸更改为自由forms 。 您可以根据需要设置视图的宽度和高度。 要像在iOS 9中一样查看屏幕,请将宽度和高度更改为600。
根据我的测试,这个线程错误在Xcode 8.1 Beta 2中修复。