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

32

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

这个问题在 Xcode 8.1 中已经解决。我已经验证过了。

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

我不太懂自动布局,所以在我的所有应用程序中都使用自动调整大小选项,这对我来说很好。我能够满足所有要求,而且没有任何问题。

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

Storyboard SS

请看图片,我设置了自动调整大小,它在所有设备中都正常工作,直到现在,这个项目已经上线了AppStore,因此我不能展示UI或storyboard。

现在我需要在项目中进行一些更新。所以我现在正在使用Xcode 8。但是我的自动调整大小没有正常工作,因为所有的控件都集中在中心,UI混乱了。

Output image

这个问题也存在于设备上。我已经检查了模拟器和设备。但问题仍然存在。有任何建议和帮助将不胜感激。提前致谢。

编辑:

昨天只有运行时有问题,但今天storyboard也像这张图片一样改变了视图

Storyboard image

这意味着整个UI设计都乱了。这很奇怪。


1
同样的问题也出现在这里...这是Xcode中的一个错误...自动布局也有问题。https://dev59.com/5FkS5IYBdhLWcg3w1JlK - Bhavin Bhadani
1
什么都没有...因为我尝试了所有的方法,但是都不起作用。 - Bhavin Bhadani
这只发生在ScrollView内的所有视图中吗? - CRDave
@CRDave 不是只有滚动视图,所有其他没有滚动视图的视图控制器都存在相同的问题。只有表格视图单元格是稳定且不会有任何变化的。 - Max
@Dennis,我会检查Xcode 8.1 GM版本的种子。 - Max
显示剩余8条评论
9个回答

7
面临相同的问题。在我看来,当我们使用自动调整大小并仅将内部自动调整大小掩码设置为任何视图控制器时,就会出现此问题。例如:

enter image description here

如果我们同时使用边界自动调整大小掩码,则不会出现此问题。例如:

enter image description here

我不知道这是Xcode 8的实际错误还是删除了Xcode 8中的此功能。

因此,最后我的建议是我们需要在Xcode 8中使用自动布局。


1
这不是一个答案。请提供一个适当的答案,或者等待公众解决方案。 - pedrouan
1
这就是苹果强制你使用自动布局的方式。让自动调整大小破坏你的应用程序。 - GeneCode
@Rocotilos 我不知道这是个bug还是苹果移除了自动调整大小功能。 - Keyur Hirani
我们需要在Xcode 8中使用自动布局。除非苹果修复它(如果他们有一天想修复它...),否则没有其他方法。 - Rémi Belzanti
请看下面的修复方法。它适用于Xcode 8,并可作为临时措施,直到您准备好使用自动布局重新编写故事板。 - Michael Long
显示剩余3条评论

7
请尝试在xib或storyboard中取消自动调整大小。在viewDidLoad中设置[_scrollView setAutoresizesSubviews:YES];
如果这样可以解决您的问题,请尝试一下。 编辑:如果是在storyboard中,请取消从NIB调整视图大小选项。

1
在我的情况下,它将80%的用户界面恢复到原来的位置,但当我尝试使用Storyboard自己纠正剩余的20%时,事情变得非常糟糕...苹果如何可以在没有测试旧项目与之兼容性的情况下发布Xcode 8呢? - Abdul Hannan

3
我不确定故事板,但我已经找到了xib文件的临时解决方案。在工具面板(右侧面板)中选择“文件检查器”选项卡。在界面生成器文档部分下,选择要在“XCode 7.x”中打开的文件。它会询问您是否不想使用XCode 8功能,请保存文件并关闭它。

enter image description here


1
它将仅锁定故事板。当您再次访问故事板时,它将使用8.0版本。 - Max
是的,不幸的是,每次编辑文件时我都需要做同样的事情。 - Srdr
1
这就是为什么这不是一个解决方案,它可以工作,直到我们得到完美和稳定的解决方案。 - Max
正如我所说,这只是一种临时方法,直到苹果更新XCode并解决问题。 - Srdr

2

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


2

我在Xcode8的scrollView中遇到了类似的问题。

我有一个解决方案可以用来处理scrollView。

首先,获取一个简单的UIView并添加所有你想要添加到scrollView中的组件,并将该组件设置为自动调整大小。

然后再获取一个scrollView并以编程方式设置视图框架,同时还要设置scrollView的contentSize并将您的视图添加到scrollView中。

就像这样,在我的情况下,我在swift项目的viewDidLoad中添加了这个代码。

// 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)

这对我有用,谢谢!


故事板(storyboard)会搞乱视图UI,我们每次需要重新设置吗? - Max
不需要每次设置,这只会在scrollView中发生,而不是在view中。 - Sapana Ranipa
如果我们只通过代码使用scrollview,那么就不需要在storyboard中使用它,这并不是Interface Builder的正确解决方案。 - Max
您可以在Storyboard中使用scrollView,而无需编写代码添加scrollView。只需将空白的scrollView拖放到Storyboard中,不要在其中添加任何UI组件,然后在Storyboard中再创建另一个视图,并在该视图中添加所有组件,给它们设置自动尺寸,并通过编程方式将该视图添加到scrollView中即可。 - Sapana Ranipa
在这种情况下,无论我们在Storyboard中使用空白的ScrollView还是通过代码添加它,都没有任何区别。 - Max

1

更新,问题似乎已在Xcode 8.1中得到解决。


我遇到了同样的问题,发现罪魁祸首是UIScrollView元素。只需将所有内容移出滚动区域,你会发现一切都像以前一样正常工作。

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


1
有许多视图没有滚动视图,也存在相同的问题。而仅有滚动视图并不是问题。 - Max
@Max,你试过把所有东西都移到滚动条外面看看是否有效吗?这对我有用。 - mojuba
@mojuba,UIScrollView不在self.view上,那么如果我将另一个视图放在主视图上,它会给出正确的结果吗? - Ahmed Sahib
@AhmedSahib,问题现在已经解决了,如果你将Xcode更新到任何版本>=8.1,那么就不用担心了。 - mojuba

1
通过取消“自动调整子视图”到滚动视图来解决。

enter image description here


但是我需要根据屏幕尺寸调整它的大小。 - Max
它解决了问题,但我们必须处理不同的屏幕尺寸。 - Hassy
在我的情况下,不同屏幕尺寸没有问题,请勿删除scrollview的自动调整大小属性。 - Thippi
1
在我的情况下,我没有使用自动布局。 - Thippi

0

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

故事板会更新框架的宽度和高度,以适应新的“视图为:”功能。虽然似乎不影响在设备/模拟器上运行。

奇怪的是,在XCode 8.2发布说明中没有提到此错误修复。

原始答案在这里


0

一位版主很友好地将我的答案作为重复项删除了,因此请查看我的答案:

iOS 10下的自动调整大小不起作用

回应max的问题,是的,调整一堆子子视图可能会很麻烦。这就是为什么我建议在滚动视图中添加一个单独的“内容视图”,并将所有现有的子视图移动到该视图内部。像滚动视图一样自动调整内容视图内的子视图,并将内容视图自动调整为滚动视图。

然后在viewDidLayoutSubviews中调整内容视图的大小。

而且,滚动视图结构中的“内容视图”几乎是使用自动布局获取自动调整大小滚动视图的标准方法,因此应该被视为最佳实践。

该方法在此处描述...

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

我的方法可能有点复杂,但我能够在大约15分钟内修补好一个带有十几个场景和视图控制器的故事板。如果使用自动布局重新构建一切,时间会长得多得多得多。

如果这些问题是重复的,请标记其中一个为另一个的副本。 - ChrisF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接