首页 文章

更新到Xcode 8后的布局问题

提问于
浏览
102

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

我能在这做些什么吗?

在Xcode 8之前

enter image description here

更新到Xcode 8后

enter image description here

16 回答

  • 3

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

    • 在Xcode 8中打开故事板并选择初始设备视图 . 像往常一样进行更改 .

    • 完成更改后,选择故事板 - >文件检查器 - >打开 - >选择'Xcode 7.x' .

    enter image description here

    • 出现提示时选择'Save and Close'

    • 您的故事板更改将被保存,您的故事板将像Xcode8之前一样运行 .

    当您需要对故事板文件进行其他更改时,请再次执行以下步骤 .

  • 1

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

  • 3

    呃同样的问题 . 我部分设法通过以下方式修复它(对于Xcode版本8.1(8B62))

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

    在此之后,对于每个有问题的场景,我不得不点击“更新帧”小图标(屏幕截图上的数字2),它修复了每个场景的所有布局问题 .

    enter image description here

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

    Phew,不是XCode8和Storyboard的惊喜 . 如果您使用了AppCode编辑器,则不会出现此类问题,因为它不支持Storyboard; P.

    祝好运!

  • 6

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

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

  • 14

    请按照线程获取任何可能的解决方案:(我相信它适用于许多开发人员) .
    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

  • 4

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

    1) Set View Size to Free Form

    enter image description here

    2) Reset Width and Height of the view to the original size:

    enter image description here

    最后保存,你就完成了 .

  • 3

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

    它根据新选择的默认视图(在我的案例中为iPhone 7)重新排列视图以适应现有约束 .

    另请注意:如果您收到像我一样的 Navigation Bar Misplaced View 警告,只需选择UINavigationController / UIViewController,然后选择 Attributes Inspector > Bar Visibility > Shows Navigation Bar - 将其关闭然后再打开 .

  • 3

    将View Size的View Size设置为Freeform对我来说很有用 . 它可以在属性检查器中的模拟度量 Headers 下找到 .

  • 1

    我遇到了同样的问题和我的视图约束 . 将以下代码放在 viewDidLoad() 函数中

    self.view.layoutIfNeeded()
    
  • 1

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

  • 5

    来自@ 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设备

    • 推送运行

    注意:使用此技巧不能使用像Swift这样的新功能,但您应该能够加载和构建项目 .

  • 111

    希望这会有所帮助

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

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

    enter image description here

    它会提示弹出一个显示选项的选项

    enter image description here

    选择 Update FramesApply to all views in container checked.it将解决约90%的扭曲UI,其余的自动布局约束问题可以手动解决 .

  • 8

    我使用Xcode Version 7.3.1解决了这个问题,你可以从apple developer portal下载.dmg文件 . 我在每个应用程序中都使用了Autoresizing,它对我很有用 . 只有在他们可以修复此错误的情况下,我才会更新到Xcode 8 .

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

  • 3

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

  • 7

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

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

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

    IB screenshot

  • 0

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

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

相关问题