Xcode 6中的Storyboard大小错误?

139
在 Xcode 6(测试版1)中使用 Swift 从头开始构建了一个新项目,但是遇到了 Storyboard 和正在查看的输出之间的一些奇怪行为。我已经建立了一个简单的界面(如下所示)- 包括视图控制器属性。当我在模拟器中运行时,我希望“Hello, World”位于用户界面中央 - 但似乎这个“正方形”只是适合 iPhone 屏幕,因此显示了错误的视图(见下图)。 我的问题是:是否有其他人看到过这种行为,他们是如何解决的?谢谢!

添加自动布局约束,这应该可以解决问题。您当前正在为所有布局进行设计,因此自动布局将帮助您在“正确”的位置显示内容。 - Raz
8
使用助理编辑器 > 自动 > 预览,您可以预览所有屏幕尺寸的屏幕预览。 - Francescu
9个回答

252

按照以下步骤解决问题:

在Storyboard中选择任意视图,然后转到文件检查器。取消“使用尺寸类”选项,您将被要求保留iPhone/iPad的尺寸类数据。然后单击“禁用尺寸类”按钮。 这样做将使故事板的视图大小与所选设备一致。


8
如果你希望获得标准的iPhone大小的视图控制器,而却得到了一个600x600的视图控制器,那么这就是正确的答案。请注意,本文不会提供解释。 - Fraggle
5
这应该是正确的答案(至少对于那些只在非Universal平台上工作的人来说)。 - Raptor
36
我不知道为什么人们认为这是正确的答案...第一个答案才是正确的...如果你不喜欢布局限制,那就是走回头路...苹果正在利用一种很好的方式来开发适合各种iPhone和iPad尺寸的应用程序,而你只是想回到旧的东西?因为你自己无法承担更新费用吗?我从未否决过,但似乎这个答案让人们感到困惑,并促使他们使用旧的方法(将被弃用),而不是鼓励他们使用新的东西... - Raphael Ayres
3
作为一个熟悉iPhone/iPad故事板的用户,以下是最佳答案。 - mamarx
3
使用布局约束...苹果正在以与Android相同的方式进行此操作。视图没有形式...有时可能会很麻烦,但如果强制设置大小,则您的应用程序在不同的设备尺寸上会显得很糟糕。如果您想让按钮出现在右下角,请为其创建2个约束,并禁止...没有X或Y选择。所有内容都将由引擎设置。使用内在大小。发挥想象力。使用关系约束。学习这个。 - Raphael Ayres
显示剩余8条评论

81

虽然Asif Bilal的回答是一个简单的解决方案,不涉及到Size Classes(这些是在iOS 8中引入的),但强烈建议您熟悉Size Classes,因为它们是未来的趋势,而且您最终也将不可避免地使用它们。"


您可能尚未添加布局约束。

选中您的标签,在底部点击布局约束按钮:

enter image description here

在该菜单中勾选宽度和高度(它们不应与我的相同),然后单击“添加约束”即可。然后将您的标签控制拖动到主视图上,松开时,您应该会看到水平和垂直居中于容器的选项。都添加好后,您就设置好了。


1
非常好 - 这对我非常有效 - 感谢您的帮助(计时器解除后将接受您的答案) - Candyfloss
1
欢迎。这是自动布局的默认行为,现在默认已启用。请记住,由于可能存在不同的屏幕尺寸/布局,应该有一种计算视图相对于其父视图位置的方法,而自动布局可以解决此问题。如果您没有添加这些约束,则视图会在运行时自动创建它们,但相对于左上角。如果您需要除此之外的任何内容(几乎总是需要其他内容),则需要明确指定约束。 - Can Poyrazoğlu
4
注意,控制拖动(可能有些困难)并不是必要的。这张图片中选择的按钮左边的一个按钮会打开一个菜单,让你可以将水平和垂直中心点固定。 - jrturton
@CanPoyrazoğlu--你提到了“选择标签”。什么标签?我在一个新的iPhone项目中遇到了同样的问题,其中没有标签或其他UI元素。这是我在Xcode 6中的第一个项目,使用Objective C。 - rattletrap99
谢谢,这真的很有帮助。你和Bilal的回答都很棒。 - creativityoverflow
显示剩余3条评论

18
如果你正在使用Xcode 6并为iOS 8设计,那么这些解决方案都不正确。要使你的仅适用于iPhone的视图大小正确,请不要关闭大小类,不要关闭推断度量,也不要设置约束(至少现在不要)。相反,使用大小类控件,它是一个易于忽略的文本按钮,最初位于Interface Builder底部,读作“wAny hAny”。
点击该按钮,选择紧凑的宽度,常规的高度。这将调整你的视图并覆盖所有iPhone纵向方向。 苹果的文档在这里:https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/SelectingASizeClass.html 或搜索“在Interface Builder中选择大小类”。

我觉得阅读你提供的链接中的整个“尺寸类别设计帮助”是很有用的,即从“关于为多个尺寸类别设计”的部分到“在早期iOS版本上使用尺寸类别部署应用程序”的部分。 - Franklin Yu
如果您想保留自动布局但希望故事板视图呈现为横向或纵向而不是正方形,则这是一个很好的解决方案。 - stephenspann

5

我在xcode 6中遇到了这个问题,有一种方法可以解决调整大小的冲突。如果您选择视图,在底部您会看到一个像|-Δ-|的图标。如果您单击它,您的项目将会为不同的设备进行调整大小。


是的,在您选择三角形符号后,单击添加缺失的约束条件,然后您就完成了。如果它是通用应用程序,则视图将根据设备大小调整大小。 - vishal dharankar

5

在Storyboard中,选择您的ViewController并进入属性检查器。在最顶部,在模拟度量下有大小和方向属性,默认为“推断”。将它们更改为所需的值。

为了使应用程序在其他屏幕尺寸上正确显示,您还需要设置约束条件,如Can Poyrazoğlu在第一篇帖子中所述。


3

前往属性检查器(右上角)。在模拟度量标准下,有大小、方向、状态栏、顶部栏和底部栏属性。对于大小(SIZE),将 Inferred 改为 Freeform。


+1 @Rachel,感谢您提供的关于模拟指标->大小:“自由形式”(即,显然,“启用由自定义视图支持的可重用xib的自定义大小”)的有用小提示。 - cweekly

3
在您的Storyboard页面上,进入文件检查器并取消“使用大小类”选项。这将使您的视图控制器缩小到您熟悉的普通iPhone大小。请注意,使用“大小类”可以让您跨多个设备设计项目。一旦取消选择,Xcode将弹出以下警告对话框。这应该是自解释的。
“禁用大小类将限制此文档仅存储单个设备系列的数据。将保留最适合目标设备的大小类的数据,并删除所有其他数据。此外,segue将转换为其非自适应等效。”

3

如果您正在使用XCode 7,设计特定设备尺寸的界面非常容易(而不是默认的正方形画布)。

在Interface Builder中,从左侧菜单中选择您的ViewController或Scene。然后在显示属性检查器下,转到模拟度量标准,并从下拉菜单中选择所需的尺寸


这只能让你在故事板中为该设备设计。当你运行应用程序时,其设计可能因不同的屏幕尺寸而大相径庭。 - dev
@JoeyTawadrous 没错。但是这回答了所问的问题 :) - Priest

2

您可能需要使用“解决自动布局问题”(位于故事板视图中的右下角-三角形图标),以添加/重置到建议的约束条件(Xcode 6.0.1)。


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