启动屏幕 XIB:缺少宽度/高度约束 (Xcode 6)

Launch Screen XIB: Missing Width / Height Constraints (Xcode 6)

使用 Xcode 6,我正在构建一个针对 iOS8[=36= 的 iOS 应用].

我正在处理 LaunchScreen.xib 文件,该文件是从菜单创建的:File > New > File > iOS - User Interface - Launch Screen。 "Use Auto Layout" 已启用。

在 XIB 的主要 UIView 中,我放置了一个 UIImageView。我想添加宽度和高度约束,以便 UIImageView 具有与容器相同的大小。但是,Xcode 不允许我这样做:我只能处理间距和对齐。

这是我看到的:

我做错了什么?为什么我看不到如下所示的菜单?

我知道我可以通过将容器的前导 space、尾随 space、顶部 space 和底部 space 设置为 0 来达到相同的结果,但我也想了解这里发生了什么。

每个 .xib 都会发生这种情况,您只是不能制作与主视图宽度相等的视图。另一方面,当您在故事板中时也可以这样做。

最后,正如您所说,您可以通过设置前导、尾随顶部和底部距离来完成所需的布局。

您的应用 运行 会在单个设备上运行吗?如果不是,你怎么知道容器的大小?它会在 iPhone 5、iPhone 6、iPod 或 iPad 之间变化。最好的方法仍然是将前导 space、尾随 space、顶部 space 和底部 space 指定为 0。您确定它可以在任何设备上工作。

无论如何,我尝试重现该问题,但无论是在 Editor/Pin 中还是通过按底部的按钮,我都可以在进入 Pin 菜单时指定图像视图的宽度和高度编辑。我可以毫无问题地指定任何 width/height。

希望对您有所帮助!

编辑:

Xcode 7+ 默认为启动屏幕的故事板文件。
如下所述,与 XIB 不同,Storyboard 文件允许您为根 UIView.

设置宽度和高度约束

我无法找到关于为什么 XIB 表现如此的官方解释,当它们在根部有一个 UIView.
在我看来奇怪的是,我们默认提供的内容 (LaunchScreen.xib) 并未设置为与我们习惯的 Storyboards 完全一样。

我选择的第一个解决方案是使用故事板而不是 XIB 来绘制启动屏幕:

  • 删除LaunchScreen.xib
  • 创建一个LaunchScreen.storyboard(菜单:File > New > File > iOS - User Interface - Storyboard
  • 转到您的项目属性,select 导航到目标的常规属性,然后 select LaunchScreen.storyboard 在 "Launch Screen File" 组合框中
  • 打开LaunchScreen.storyboard,添加一个View Controller,然后确保勾选"Is Initial View Controller Box"
  • 您现在可以将视图控制器的视图作为您的启动屏幕,并且您将获得我最初寻找的宽度和高度限制

另一种解决方案是删除 LaunchScreen.xib 中的默认 UIView 并将其替换为视图控制器。
就像前面的例子一样,如果你这样做,你可以在 View Controller 的 View 上工作,你会得到通常的约束菜单。

一个非常简单的解决方案是添加一个清晰的 UIView 并将其固定到容器中,然后您可以通过将它们与您添加的清晰 "root" UIView 相关联来访问所有约束。