从选项卡控制器中删除选项卡时的自动布局问题

Posted

技术标签:

【中文标题】从选项卡控制器中删除选项卡时的自动布局问题【英文标题】:Auto-layout issue when removing a tab from a tabbarcontroller 【发布时间】:2016-07-03 01:02:50 【问题描述】:

我有一个带有 4 个选项卡的 TabBarController。

其中一个标签有一个 UIView,它有几个标签和按钮。

这个 UIView 本身有一个约束“顶部”到顶部布局指南底部设置为 88。

这是到导航栏的距离。

我有一个案例,我需要在运行时删除一些其他选项卡,我在 TabBarController viewDidLoad 上使用:

tabBarViewControllers?.removeAtIndex(index)

我遇到的问题是,如果我删除任何其他选项卡,只要我尝试与选项卡屏幕交互,上述约束就会“丢失”。

知道什么可能“打破”/改变约束吗?没有错误消息,并且查看 X、Y 坐标看起来好像约束已调整到选项卡的顶部,就好像没有导航栏一样(尽管它在屏幕上清晰可见)。

更新: 在启动带有所有选项卡且不包含某些选项卡的 TabBarController 时仔细检查 X、Y 坐标后,100% 清楚的是,当删除选项卡时我“丢失”状态栏的高度和高度导致视图的 Y 坐标为 80 而不是 152 (= 80 + 44 (navbar) + 22 (status bar) + 6 (padding set else))的导航栏。

虽然理论上我可以将偏移量硬编码为 152,但我宁愿理解为什么 我是不是失去了导航栏和状态栏的“高度”...

【问题讨论】:

我尝试使用常量 88(这是我需要的),但它不起作用。你为什么建议常数为 0? 【参考方案1】:

发现了一个类似的问题here。虽然它没有解决我的问题(我没有使用 scrollView),但它让我重新思考了我如何设置约束。

为了解决我的问题,我将到主视图的垂直距离设置为与导航栏相反(我使用了故事板中的 pin 菜单并将垂直约束设置为它)。

【讨论】:

以上是关于从选项卡控制器中删除选项卡时的自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章

选项卡内容布局显示在其他选项卡中

CSS选项卡宽度自动调整大小

当添加子选项卡时,如何使 qtabwidget 实例自动调整大小?

TYPO3 提供程序扩展现在在页面布局选项卡中显示其页面布局

在 UITabbarController 中切换选项卡时的 popToRoot UINavigationController

切换选项卡时删除所有子视图控制器并移至父视图控制器 IOS 目标 c