Xcode 8 中的自动调整大小问题

Posted

技术标签:

【中文标题】Xcode 8 中的自动调整大小问题【英文标题】:Autoresizing issue in Xcode 8 【发布时间】:2017-01-24 08:50:03 【问题描述】:

=== 编辑 ========

这个问题现在在 Xcode 8.1 中得到解决。我查过了。

=================

我不知道正确的自动布局。所以,我在我的所有应用程序中都使用了自动调整大小选项,这对我来说很好。我可以毫无问题地满足我的所有要求。

现在在 Xcode 8 中,我已将旧的 swift 项目迁移到 swift 3。现在问题出现了。

如图所示,我已经设置了自动调整大小,直到现在它在所有设备上都可以正常工作,并且该项目已在 AppStore 中运行,因此我无法显示 UI 或情节提要。

现在我必须在项目中进行一些更新。所以我现在在 Xcode 8 中工作。但是我的自动调整大小不能正常工作,因为所有控件都在中心并且 UI 很混乱。

而且问题仍然存在于设备中。我也检查了模拟器和设备。但问题也存在。任何建议和帮助将不胜感激。提前致谢。

编辑:

昨天只有运行时有问题,但是今天故事板也改变了像这张图片的视图

这意味着整个 UI 设计一团糟。这很奇怪。

【问题讨论】:

same here ...它是xcode中的一个错误...并且自动布局也存在问题***.com/questions/39394316/… @EICaptainv2.0 好的,但是有更新帧的答案。但是在这种情况下该怎么办? 在这种情况下什么都没有……因为我什么都试过了,但对我没有用 这种情况只发生在 Scrollview 内的所有视图上? @CRDave 不。不仅是滚动视图,所有其他没有滚动视图的视图控制器也有同样的问题。只有 tableview 单元格是稳定的,没有变化。 【参考方案1】:

面临同样的问题。在我看来,当我们使用自动调整大小并将内部 autoresizingMask 设置为任何视图控制器时,就会发生此问题。喜欢,

如果我们同时使用边界 autoresizingMask 则不会遇到此问题。喜欢,

我不知道这是 xcode 8 的实际错误或在 xcode 8 中删除此功能。

所以,最后我的建议是我们需要在 xcode 8 中使用自动布局。

【讨论】:

这不是答案。请做出适当的回答,或等待公众的解决方案。 这也不是一个答案。答案是一个解决方案,你的最后一句话,如果它可能是解决方案,应该发布而不是作为评论。 是的,这个错误很严重而且仍然存在,我们必须能够禁用 AutLayout 并且在 Storyboard 上没有问题,因为我们一直可以做到 Xcode 7.3.1 这就是 Apple 强制您使用自动布局的方式。使自动调整大小破坏您的应用程序。 @Rocotilos 我不知道这是错误还是苹果删除自动调整大小功能。【参考方案2】:

请尝试从 xib 或情节提要中取消选中自动调整大小。并在viewDidLoad 设置[_scrollView setAutoresizesSubviews:YES];

如果这能解决您的问题,请尝试

编辑:如果是情节提要,请取消选中 Resize view from NIB 选项。

【讨论】:

在我的情况下,它将 80% 的 UI 带到了原来的位置,但是当我尝试使用故事板自己纠正 20% 时,事情变得很糟糕...... Apple 如何在不测试旧项目兼容性的情况下发布 Xcode 8它【参考方案3】:

我不确定情节提要,但我找到了 xib 文件的临时解决方案。在实用程序面板(右侧面板)中选择文件检查器选项卡。在 Interface Builder Document 部分下,选择要在“XCode 7.x”中打开的文件。它将要求您确认您不想使用 XCode 8 功能,保存文件并关闭它。

【讨论】:

它只会在那个时候锁定情节提要。再次访问情节提要时,它将使用 8.0。 是的,不幸的是我每次编辑文件时都需要做同样的事情。 这就是为什么这不是一个解决方案,它可以工作,直到我们得到完美稳定的解决方案。 正如我所说,这是在 Apple 更新 XCode 并解决问题之前使其正常工作的一种临时方法。【参考方案4】:

Xcode8 中的 scrollView 也面临同样的问题

我有一个使用 scrollView 的解决方案

首先获取一个简单的 UIView,然后在 scrollView 中添加您想要添加的所有组件,并将该组件提供给 autoSizing

还需要一个 scrollView 并以编程方式设置视图框架,还设置 scrollView contentSize 并将您的视图添加到 scrollView 中

同样,在我的例子中,我在 viewDidLoad 中为 swift 项目添加了这段代码

// add view to scrollview

self.scrollObjForNextAppointment.contentSize = CGSize(width:self.scrollObjForNextAppointment.frame.size.width,height:410)

self.viewForScrollContent.frame = CGRect(x:0,y:0,width:self.scrollObjForNextAppointment.frame.size.width,height:410)

self.scrollObjForNextAppointment.addSubview(self.viewForScrollContent)

这对我有用,谢谢!

【讨论】:

故事板会弄乱视图 UI 怎么办?每次我们都需要设置吗? 不需要每次都设置,只发生在scrollView中,不在视图中 那么如果我们只通过代码使用滚动视图,那么不需要在故事板中使用,这不是界面构建器的正确解决方案。 您可以在storyboard中使用scrollView,不需要通过编码添加scrollView,只需使用空scrollView而不在该scrollView中添加任何UIComponent,在storyBoard中获取另一个视图并添加您的所有组件并给他们通过编码自动调整大小并在滚动视图中添加该视图。 在这种情况下,我们在storyboard中取空白scrollview或通过代码添加没有区别。【参考方案5】:

Xcode 8 beta 2 解决了这个问题!!我现在已经检查过了!

【讨论】:

【参考方案6】:

通过取消选中“Auto Resize Subviews”到 ScrollView 解决

【讨论】:

但我需要根据屏幕大小调整它的大小。 它解决了问题,但我们必须处理不同的屏幕尺寸 在我的情况下,不同的屏幕尺寸没有问题,不要删除滚动视图的自动调整大小属性。 就我而言,我没有使用自动布局【参考方案7】:

更新该问题似乎已在 Xcode 8.1 中修复


遇到同样的问题,我发现这里的问题是 UIScrollView 元素。只需将所有内容移出滚动条,您就会发现一切正常,就像以前一样。

这意味着一种可能的解决方法是将可滚动内容放在普通的 UIView 中,然后在运行时以编程方式将其替换为 UIScrollView。

【讨论】:

有很多没有滚动视图的视图,也有同样的问题。并且仅滚动视图没有问题。 @Max 您是否尝试将所有内容移出滚动条并查看是否有效?它对我有用。 @mojuba 是不在 self.view 上的 UIScrollView,所以如果我在主视图上取另一个视图,它会给出正确的结果。 @AhmedSahib 如果您将 Xcode 更新到任何版本 >= 8.1,问题现在已得到解决,因此无需担心【参考方案8】:

版主特意删除了我在此处的重复答案,因此请参阅我的答案:

Autoresizing under ios 10 doesn't work

对于 max,是的,调整一堆子视图的大小可能会很痛苦。这就是为什么我建议在滚动视图中添加一个“内容视图”并将所有现有的子视图移动到该视图中。就像使用滚动视图一样自动调整内容视图内部的子视图,并将内容视图自动调整为滚动视图。

这是您在 viewDidLayoutSubviews 中调整大小的内容视图。

再一次,scrollview 构造内部的“内容视图”几乎是使用自动布局获得自动调整滚动视图大小的标准方法,因此它应该被视为最佳实践。

这里描述了该方法...

https://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/

我的方法似乎有点复杂,但我能够在大约 15 分钟内修补一个包含十几个场景和 Vc 的故事板。使用自动布局重建所有内容会花费更多、更多、更长的时间。

【讨论】:

如果问题重复,请将其中一个标记为另一个重复。【参考方案9】:

Apple 刚刚推出了 XCode 8.2,它为我解决了这个问题。我一直在使用 XCode 7.3.1 进行与 8.1 平行的界面设计,但我现在可以毫无问题地使用 8.2。

不过,故事板会更新帧的宽度和高度,以适应新的“查看方式:”功能。虽然它似乎不影响在设备/模拟器上运行。

奇怪的是,XCode 8.2 release notes 中没有提到它的错误修复。

原答案here

【讨论】:

以上是关于Xcode 8 中的自动调整大小问题的主要内容,如果未能解决你的问题,请参考以下文章

在启用自动布局的情况下调整 swift/xcode 中的按钮大小

如何自动调整可可 xcode 的大小?

Xcode 5:自动调整大小

Xcode 5:不同屏幕大小的 iPhone 自动布局视图调整大小问题

xcode/iOS:自动调整大小以填充视图 - 显式帧大小是必不可少的吗?

Xcode 自动布局调整大小问题