使用导航控制器将视图复制到项目 - “图像视图”的框架在运行时会有所不同

Posted

技术标签:

【中文标题】使用导航控制器将视图复制到项目 - “图像视图”的框架在运行时会有所不同【英文标题】:Copied a View to a project with Navigation Controller - Frame for "Image View" will be different at run time 【发布时间】:2014-01-27 13:29:30 【问题描述】:

对于有经验的 Xcode 5 界面构建器用户来说可能是一个简单的问题,但在 Google 上很难找到答案:

我有an app for iPhone,它不使用导航控制器(这里是fullscreen):

最右侧的视图场景有一个图像视图和下面的 5 个标签 - 用于显示用户详细信息:

然后我创建了another iPhone app 并将那个“详细信息”视图复制到它(这里是fullscreen):

现在 Xcode 5.0.2 显示警告:

“图像视图”的框架在运行时会有所不同。

是不是因为视图顶部的一些空间会被导航栏占用?

请问如何解决?

我尝试点击 [-o-] 图标,但没有解决我的布局问题,而是弄乱了整个布局(标签跳到了左边)。

我还尝试在 Xcode 属性检查器的右侧设置复选框,但在那里找不到任何好的组合(我不确定 Xcode 上下文中的“推断”是什么意思)。

更新:

Ossir 的建议对我有用,谢谢。

我将发布一个新的屏幕截图(此处为fullscreen),以防有人有更多改进建议:

【问题讨论】:

【参考方案1】:

我发现取消选中相关导航控制器的 Adjust Scroll View Insets 复选框清除了警告

【讨论】:

知道为什么会有帮助吗? 不,抱歉,希望得到充分的解释。我还注意到该问题可能会重新出现,并且选中/取消选中会清除它。【参考方案2】:

选择UIImageView并点击[-o-]图标,然后选择Reset To Suggested Constraints菜单项。 模拟指标部分在运行时什么都不做,它只是我们在编译之前弄清楚布局的样子。

还有另一种(更好的)方法,但您必须分析UIImageView 有哪些约束并相应地更改它们以适应新布局(添加导航栏)。您可以尝试在此处发布带有这些限制的屏幕截图,以便我们帮助您弄清楚发生了什么。转到右侧面板中的 Size Inspector 并向我们展示 Constraints 部分。

更新

您的约束强制UIImageView 具有与下面的标签相同的水平对齐和相同的宽度。另外,您对最顶部标签和导航栏的固定垂直空间有限制,UIImageView 的宽度取决于导航栏和标签之间的可用空间。我认为这是当前布局(不滚动)的好解决方案,因为所有内容都适合 3.5 英寸和 4 英寸显示器的屏幕。如果您想要不同的行为,请在 cmets 中告诉我。

【讨论】:

【参考方案3】:

刚刚在 Xcode 8.0 版 Swift 3.0 中遇到了同样的警告。在我检查并取消选中“调整滚动视图插图”选项后,警告消失了。注意:一开始并没有像上面的评论那样检查它们,所以对于那些有同样警告的人来说,它可能会澄清。

选中/取消选中“调整滚动视图插图”选项。

【讨论】:

选中/取消选中“调整滚动视图插图”将在 Xcode 8 / Swift 3 中清除此问题,但只是暂时的。它们会在你重启 Xcode 后返回。【参考方案4】:

看起来您在界面构建器中为 4 英寸屏幕设计应用时,却在 3.5 英寸屏幕上运行您的应用。 您应该设置所有缺少的约束,以便自动布局“知道”如何布置图像视图和标签。

我会为标签设置一个固定的高度,为图像视图设置一个可变的高度。然后将图像视图的内容模式设置为“方面填充”(请注意,在这种情况下,您将丢失图像的一部分,而不是左右两侧有灰色条纹)。

【讨论】:

+1 谢谢!如何为子视图设置“可变高度”?当我单击图像视图时,我在 Xcode Size Inspector 中看不到这样的选项:i.stack.imgur.com/eHQg1.png 在该屏幕截图中显示的布局配置中,UIImageView 的高度已经是可变的。如果您在视图顶部和图像视图之间定义了一个固定空间,并且图像视图下的所有元素也具有固定高度,那么图像视图将增长以填充剩余空间。

以上是关于使用导航控制器将视图复制到项目 - “图像视图”的框架在运行时会有所不同的主要内容,如果未能解决你的问题,请参考以下文章

在导航栏下方设置图像视图

如何在滚动视图中填充图像以填充屏幕?

使用图像视图在 PageRow 元素之间导航

Swift,约束,视图层次结构没有为约束做好准备

在 Swift 中将图像视图从一个视图控制器转移到另一个视图控制器

如何将两个图像附加到 ios 中的 mfmailcomposer 视图控制器