在iOS 10下自动调整不起作用

时间:2016-09-15 14:44:22

标签: ios ios10 autoresizingmask

我有一个没有AutoLayout和Constraints的应用程序。我只在尺寸检查器中设置自动调整。在iOS 9和更早版本下工作都很好。在iOS 10下,自动调整功能不起作用,并将大小设置在屏幕之外。看下面的图片: 在模拟器中的iOS 10下

![1]

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

5 个答案:

答案 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)

两种可能的解决方案,

  1. 修改图片中显示的autoresizingmask,它不是100%理想的,因为没有正确的填充,但它会起作用。
  2. enter image description here

    1. 设置文本字段的框架,即CGRectMake(padding, y, self.view.frame.size.width-padding*2, height),这不是很好,因为您需要为每个文本字段执行此操作,但它将再次起作用:p。
    2. 不幸的是,我不确定为什么文本字段的宽度会像你为iOS 10设置的那样达到1000+,它可能与scrollview有关,我在没有scrollview的情况下测试它并且它按预期工作

答案 3 :(得分:0)

您可以从尺寸检查器更改视图控制器的模拟尺寸。转到尺寸检查器并将模拟尺寸更改为自由格式。您可以根据需要设置视图的宽度和高度。要像在iOS 9中一样查看屏幕,请将宽度和高度更改为600。

enter image description here

答案 4 :(得分:0)

根据我的测试,这个thread错误已在Xcode 8.1 Beta 2中修复。