iOS UI 元素在标签栏控制器中来回切换后被拉伸

Posted

技术标签:

【中文标题】iOS UI 元素在标签栏控制器中来回切换后被拉伸【英文标题】:iOS UI elements are stretched after switching back and forth in tab bar controller 【发布时间】:2014-01-23 08:34:18 【问题描述】:

我在一个 ios 应用程序的第一个视图中有几个 UI 元素在三视图标签栏控制器中。

当我运行该应用程序时,第一个视图看起来以某种方式显示,但随后我切换到另一个视图,然后返回到第一个视图 - 第一个视图被拉伸(主要似乎是垂直拉伸)。

我认为这与约束有关,但我不确定。

什么可能导致这个问题?

谢谢!

【问题讨论】:

如果您需要帮助,您需要提供一些代码。这里没有足够的信息。也就是说,我敢打赌,问题出在您的 viewWillAppear:viewDidAppear: 方法中。 我现在注意到两件事:1. 它只发生在 iPhone5 上(不是更早的)。 2. 如果我打开通讯录或联系人(我的应用程序中需要的功能),我会看到视图拉伸回其默认大小。然后在我切换标签时再次拉伸。 会不会是使用iOS7时底部布局指南不固定? 【参考方案1】:

当您看到事物随机变化时,这通常意味着您的布局不明确。这意味着您没有为自动布局提供足够的信息来确切知道您想要什么。例如,您是否设置了水平约束?

您可以通过设置断点并在调试器中运行来检查这一点

po [[UIWindow keyWindow] _autolayoutTrace]

此外,如果您发布您的限制条件,有人可能会更好地帮助您。

【讨论】:

我已经清除了所有不明确的布局。只是非常不清楚为什么 UIViewImage 不与顶部和底部布局指南保持连接。 清除了不明确的布局后是否仍然表现得很奇怪?没有细节很难回答你的问题。发布您的代码和 autolayoutTrace,也许有人可以帮助您。 我有踪迹,但我应该寻找什么? 我不能将图像限制在“底部布局指南”中吗?我试图让背景不被底栏遮挡,但自动修复自动布局会消除此约束。它甚至不会在警告中显示为模棱两可。 显然当我从其他标签栏项目切换 bask 时 self.bottomLayoutGuide.length 更改为 0,而当我从通讯簿或联系人视图返回时不会发生。这是什么原因造成的?【参考方案2】:

这是由于 iOS 中的一个 bug,其中 bottomLayoutGuide 被错误地设置为 0。

UIViews ending up beneath tab bar

【讨论】:

以上是关于iOS UI 元素在标签栏控制器中来回切换后被拉伸的主要内容,如果未能解决你的问题,请参考以下文章

切换视图时标签栏丢失

切换到横向视图并使用标签栏控制器

在导航到另一个视图控制器之前切换标签栏

iOS开发中标签控制器的使用——UITabBarController

每个 ViewController 在标签栏内都有自己的导航栏(iOS)

iOS MapView 位于导航栏、状态栏和标签栏控制器下