更新到Xcode 8后的布局问题

时间:2016-09-14 18:46:38

标签: ios xcode autolayout xcode8 ios10

在升级到Xcode 8之后,这是我的一个屏幕之前和之后。
我所做的就是打开我的 main.storyboard 并从那里开始构建并运行我的手机上的应用程序。
在我的版本控制中,我可以看到Xcode正在对我的main.storyboard进行很多更改,就在我打开它的时候。
每当我删除这些更改时,我都可以看到我在Xcode 7.3.1中看到的内容。
但是,只要我用我的故事板重新打开界面构建器,我就会看到这些更改重新进入地方。

我有什么可以做的吗?

在Xcode 8之前

enter image description here

更新到Xcode 8后

enter image description here

16 个答案:

答案 0 :(得分:111)

我有一个类似的问题,一旦我将storyboard文件转换为兼容Xcode8,桌面图像就不会出现了。这看起来像Xcode8的一个错误,所以在发布错误修复之前,这是一个解决方法:

  1. 在Xcode 8中打开故事板并选择初始设备视图。像往常一样进行更改。
  2. 完成更改后,选择故事板 - >文件检查器 - >打开 - >选择' Xcode 7.x'。
  3. enter image description here

    1. 选择'保存并关闭'提示时
    2. 您的故事板更改将被保存,您的故事板将像Xcode8之前一样运行。
    3. 如果您需要对故事板文件进行其他更改,请再次按照以下步骤操作。

答案 1 :(得分:14)

XIB或Storyboard默认设置为旧版本7.x和保存并关闭。临时解决方案,但有效。完成保存并关闭后,请勿再次打开。否则,再次需要从开始执行相同的步骤。enter image description here

答案 2 :(得分:8)

呃同样的问题。我部分设法通过以下方式修复它( for Xcode Version 8.1(8B62)

在Storyboard的文档大纲中,我点击了每个场景,其中黄色箭头表示一些布局问题(屏幕截图上的数字1)

在此之后,对于每个有问题的场景,我必须点击"更新帧"小图标(屏幕截图中的第2个)修复了每个场景的所有布局问题。

enter image description here

然而,从Xcode7过渡到Xcode8后,我的案例中的一个场景仍然处于哭泣状态。我必须通过调整约束或添加缺少的约束来手动修复它。

Phew,对XCode8和Storyboard来说并不是一件好事。如果你使用了AppCode编辑器,你就不会遇到这样的问题,因为它不支持Storyboard; P

祝你好运!

答案 3 :(得分:7)

Xcode 8.1 Beta 2解决了这个问题。请查看此下载链接

https://developer.apple.com/download/

答案 4 :(得分:6)

请按照主题获取任何可能的解决方案:(我相信它适用于许多开发人员) Xcode 8 GM seed Storyboard issue
Xcode 8 - Previous storyboards getting distorted

(我使用anyH anyW width 600)当Xcode更新为Xcode 8时,它改变了我所有的ViewControllers大小。结果所有的布局都被扭曲了 目前我只看到3个问题的解决方案(我不相信很快就会等待修复)。

1.为每个Viewcontroller选择并按Update Frames进行修复。

   2.转到主ViewController Size Inspector -> Freeform -> 600,因为推断出大多数控制器会改变它的大小    所有这些。(小心我想要的新功能Apple的影响    介绍)。

   3.删除故事板中git的变化(我不建议它,因为Apple也插入了一些可能对于    xcode的)。

Xcode 8(WWDC16)中新的AutoLayout功能的附加链接: Making Apps Adaptive, Part 1

答案 5 :(得分:5)

在我的案例中,Akhil Kateja建议的工作解决方案,我还需要重置主视图的宽度和高度:

1)将视图大小设置为自由格式

enter image description here

2)将视图的宽度和高度重置为原始大小:

enter image description here

最后保存,你就完成了。

答案 6 :(得分:4)

对我来说,解决方案只是单击有问题的UIViewController然后Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

它根据新选择的默认视图(在我的情况下为iPhone 7)重新排列视图以适应现有约束。

另请注意:如果您像我一样得到导航栏错位视图警告,只需选择UINavigationController / UIViewController,然后选择Attributes Inspector > Bar Visibility > Shows Navigation Bar - 将其关闭然后再打开。

答案 7 :(得分:3)

将视图大小设置为 Freeform 推断为我工作。它可以在属性检查器中的模拟指标标题下找到。

答案 8 :(得分:3)

我遇到了同样的问题,我通过强制更新控制器的视图约束解决了这个问题。将以下代码放在 viewDidLoad()函数

self.view.layoutIfNeeded()

答案 9 :(得分:3)

我选择了每个控制器并单击“更新帧”并修复了布局。

答案 10 :(得分:3)

@ david-truong(https://stackoverflow.com/a/39589860/1407528)的答案在我的情况下不起作用,所以如果你处于同样的情况,试试这个:

如果您将所有设备更新到iOS 10+,则此版本的Xcode将无法将这些设备识别为兼容设备。所以,试试这个技巧:

  • 转至:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • 将与iOS 10或10.1相关的文件夹复制到:/ Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • 使用Xcode 7.3.1打开项目(如果已经打开则重新启动Xcode)
  • 选择已连接的iOS 10+设备
  • Push Run

注意:使用此技巧无法使用Swift等新功能,但您应该能够加载和构建项目。

答案 11 :(得分:3)

希望这会有所帮助

当我将Xcode从7.3更新到Xcode 8并运行应用程序时,一些视图完美显示但有些视图失真。然后,我检查了nib文件,它促使我选择特定的设备大小然后显示笔尖根据设备大小而言,不是Any-Any(Xcode 7.3)。所以所有的nibs文件都没有以正确的方式显示。

我的解决方案工作: - 按下黄色箭头,如下图所示

enter image description here

它会提示弹出窗口,显示

等选项

enter image description here

选择Update Frames Apply to all views in container checked.it将解决约90%的扭曲用户界面,其余的自动布局约束问题可以手动解决。

答案 12 :(得分:1)

我使用Xcode版本7.3.1解决了这个问题,您可以从Apple开发人员门户网站下载.dmg文件。我在每个应用程序中都使用了Autoresizing,它对我很有用。 只有在他们能解决这个问题时我才会更新到Xcode 8。

在此处下载:https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg

答案 13 :(得分:1)

为了解决类似的问题,我将xib配置为Freeform(非推断)并将xib文件保存为Xcode 7.x兼容。我的案子中都需要这两个步骤。我希望有所帮助!

答案 14 :(得分:1)

我注意到Xcode 8.2中的一个新按钮,(检查图像中的橙色圆圈)。它会给你一些帮助。

步骤:  1.打开故事板并选择所需的任何设备  2.只需选择View Controller即可  3.单击提到的按钮(如图像中所示)  4.它将更新该视图控制器的帧,您可以继续它

我没有找到比这更好的解决方案。如果找到,请回复。

IB screenshot

答案 15 :(得分:0)

在viewdidload中更新约束和布局子视图解决了问题

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}