只有在将方向更改为横向并返回纵向后,纵向布局才能正确显示

Posted

技术标签:

【中文标题】只有在将方向更改为横向并返回纵向后,纵向布局才能正确显示【英文标题】:Portrait Layout is shown properly only after changing the orientation to Landscape and back to Portrait 【发布时间】:2015-10-08 11:21:59 【问题描述】:

我有一个简单的布局,其中包含多个视图和约束,可以根据需要定位和调整它们的大小。当我将应用程序部署到模拟器或设备时,所有视图的 X、Y 和宽度都具有适当的大小。另一方面,高度始终为 0。根据超级视图,所有视图都具有成比例的高度。

现在,如果我将方向翻转为横向,然后再返回纵向,一切都会正确显示(高度不再为 0)。

我之前使用相同的逻辑与比例高度,更新到 Xcode 7 后,我开始在新创建的视图控制器上看到这个问题。

编辑您可以从以下位置获取 .xib:http://1drv.ms/1M81EUQ

【问题讨论】:

需要更多关于如何设置约束的信息 - 你能分享代码或故事板文件吗?听起来您缺少约束。 您是否更改了代码中相关视图的任何内容?在我看来,就像您正在添加一些确定代码高度的内容,但在设备旋转之前不会重绘视图。也许您在某处忘记了 layoutIfNeeded? @ProgrammingBonn 不,我不会更改代码中的任何内容。我只是在 XIB 中有布局并加载它。 @Ben 我编辑了问题以添加指向 .xib 文件的链接。 【参考方案1】:

如果您使用自动蒙版调整大小或使用自动布局来解决此问题,则必须针对更改的方向设置不同的视图更新方法调用。

【讨论】:

不确定我是否正确理解您的意思,但如果您的建议是这样,我正在使用自动布局。 我以为您没有设置 IBoutlet 的固定高度和宽度。并请设置底部间距等于或小于。 不确定我是否理解。您介意编辑问题中链接的 .xib 文件并对其进行修改,然后将其附加到某处以便我明白您的意思吗?谢谢。【参考方案2】:

您的 .xib 配置为启用了大小类,但您的视图和约束都配置为仅适用于紧凑宽度、常规高度。

我检查并更改了视图和约束以应用于任何宽度、任何高度,这解决了横向布局的问题。

Download the modified .xib file here

我建议在使用 Autolayout 时使用 Xcode 7 的 Preview Assistant View,因为它可以让您同时在多个方向上查看多个设备。在这种情况下,这确实有助于显示布局在纵向上很好,但在横向上却不行。

这是我在您提供的 .xib 中看到的内容

随着我的 .xib 中的变化

这怎么可能发生?一种方法是您可能不小心将情节提要编辑器设置为特定的大小等级。如果您在编辑器底部看到蓝色边框,则您添加的任何内容都将配置为仅针对该特定尺寸类别安装。您可以单击显示的尺寸等级将其更改为 w Any h Any 以返回默认模式。

【讨论】:

感谢您花时间查看它。虽然我的问题不在于它在横向模式下不起作用(此页面仅用于纵向)。问题是,为了正确显示纵向页面,我需要更改方向,这样当它切换回纵向时,一切都会正确显示。此外,肖像预览一切正常,只有在实际设备或模拟器上运行时才会出现问题。

以上是关于只有在将方向更改为横向并返回纵向后,纵向布局才能正确显示的主要内容,如果未能解决你的问题,请参考以下文章

主视图控制器在点击项目并快速将方向从纵向更改为横向后消失

将方向更改回纵向

在Objective C中点击后退按钮时如何将界面方向从横向更改为纵向

如何使用自动布局为纵向和横向方向配置不同的布局?

将 Cocos 2d 方向横向更改为纵向

横向布局更改为纵向