当在 UITabBarController 中选择 UIViewController 时视图的变化

Posted

技术标签:

【中文标题】当在 UITabBarController 中选择 UIViewController 时视图的变化【英文标题】:When selecting UIViewController in UITabBarController frame of view changes 【发布时间】:2011-09-26 19:20:06 【问题描述】:

据我所知,我遇到了一个奇怪的问题。问题是 UIVIewController 的视图框架在第一次显示在 UITabBarController 中时会发生变化。

我将尝试描述我的架构。 我有一个类是 UITabController 的子类。在这个类中,我创建了 3 个 UIViewController (A,B,C),然后将它们放入 UITabBarController 的 viewControllers 数组中。 UITabBarController 的 selectedIndex 设置为 0,因此 A 是第一个显示的。 Everthing 在视图 A 中呈现正常。但是当我切换到第二个视图 B 或第三个视图 C 时,每个子视图帧都会以某种方式损坏。大小和位置发生了变化。

i NSLog UIViewControllers (A, B, C) 的帧,然后将它们添加到 UITabBarController 的 viewControllers 数组中,结果是 (0,20,320,460)。在它们显示的那一刻,它们的框架变为 (0,0,320,411)。但是 ViewControlles A 仍然可以渲染。其他两个不是:S

【问题讨论】:

【参考方案1】:

必须查看一些代码才能确切知道问题出在哪里,但与此同时,您应该在 viewController 的 viewWillAppear 方法中设置子视图,并使用 BOOL 确保它们只设置一次(不是每次调用 viewWillAppear 方法时)。这应该确保子视图匹配正确的框架。

-(void)viewWillAppear 
if (!viewWasAlreadySetUpBOOL) 
//setup all the views
viewWasAlreadySetUpBOOL = YES;


【讨论】:

谢谢,但我认为这不能解决我的问题。在将 UIViewController 的子视图添加到 UITabBarController 的 viewControllers 数组之前,我只设置了一次。我根本看不到 viewWillAppear 方法。 我知道。使用我描述的 -(void)viewWillAppear 方法,看看会发生什么。它只会为每个 viewController 设置一次视图(这就是 bool 的用途)。过去我也遇到过类似的问题,这很有效。 嗯。有趣的。好的,我会尽力让你知道。谢谢【参考方案2】:

在将视图添加到 tabBar 数组后,您的框架高度可能会发生变化,这确实是有道理的。标准 tabBar 的高度是 49px,这是您在日志中看到的高度值的差异。这是有道理的,因为每个视图都经过调整以适应可用的屏幕大小,减去 tabBar 的大小。

您如何以编程方式或 IB 方式设置视图?你用的是什么尺寸?如果您以编程方式或通过 IB 设置框架,但没有考虑到 tabBar 的偏移量,它可能会偏离您放置视图的位置。查看一些代码会有所帮助,但没有任何代码,我建议检查您如何调整标签栏的框架。

【讨论】:

以上是关于当在 UITabBarController 中选择 UIViewController 时视图的变化的主要内容,如果未能解决你的问题,请参考以下文章

未选择选项卡时更改 UITabBarController 选项卡图标颜色

如何在用户选择时在 uitabbarcontroller 内的 uinavigationcontroller 中每次都初始化 viewcontroller

在 iOS7 UITabbarController 中,如何在点击已选择的 tabBarItem 时停止将 navigationController 重置为 root?

UITabBarController 未选择的图标图像色调

ios在选择uitabbarcontroller项目时检索

当新页面被推入颤动时如何隐藏本机Tabbar?