TabBarController 的自动布局问题
Posted
技术标签:
【中文标题】TabBarController 的自动布局问题【英文标题】:AutoLayout issue with TabBarController 【发布时间】:2017-05-07 19:51:18 【问题描述】:我遇到了一个非常尴尬的自动布局问题。我有一个导航控制器,出于某种目的,我已将其 rootviewcontroller 设置为 tabbarview 控制器。见下图:
在上图中你可以看到有 6 个 viewcontroller 与 tabbarviewcontroller 相连。
在第 3、4、5 和 6 个视图控制器中添加了一个白色视图和自动布局,如下所示:现在,当我选择选项卡 3 或 4 运行后,添加的视图完全按照我的意愿显示,并且根据自动布局,它应该显示为显示的样子。即下面给出:
现在,当我选择“更多”时,它会根据其默认行为显示一个 tableviewcontroller,如下所示:
这是发生的问题,现在如果您从列表中选择任何项目并转到受尊重的视图控制器,添加的白色视图会从导航栏中下降。我不明白为什么会这样。请看图片:
我一整天都在尝试解决这个问题,但没有任何反应,有些方法得到了一个解决方案,但这不是我需要的。即见下图:
如果取消选中该视图控制器的“在顶部栏下”,则它可以正常工作,但它会影响导航栏,这是我不想要的。请看图片:
这里有人遇到过类似问题并找到了完美的解决方案,我正在寻求帮助。
注意:任何视图控制器中都没有类,都在故事板中。
提前致谢。
【问题讨论】:
禁用 viewController 的 Adjust Scroll View Insets。 @KKRocks 这样做了,但没有用。 UINavigationBar.appearance().translucent = false in appdelegate 试试这个 它确实有效,但在导航栏下方带有一个后退按钮。这不是我要找的。 @KKRocks 你能把这个截图发过来吗? 【参考方案1】:这是有两个导航栏的问题......你可以跟踪视图层次......你能解释一下你想要什么吗?
【讨论】:
是的,我需要一个带有 rootviewcontroller tabbarcontroller 的导航栏,现在如果在该 tabbarcontroller 中添加 5 个视图控制器并通过故事板添加视图的子视图,它适用于所有 5 个视图控制器,但是当我再添加一个视图控制器时,第 5 个视图控制器和第 6 个视图控制器在一个表视图下,这很好,但是当我从表视图中选择任何视图控制器时,添加子视图就会下降。可能它正在发生你的答案,而且我很确定它是由于两个导航控制器,但现在要骑它..? 在情节提要中检查您的视图控制器....尝试删除该导航控制器。 但我必须为我的实际项目保留它。 什么是真正的项目...你只需要删除这个控制器。 选择该导航栏并按删除键或***.com/a/17549703/3901620【参考方案2】:为我的 tabbarcontroller 获取了一个 UiTbaBarControllerClass,在该控制器中我设置了委托自我并遵循我的代码,现在它可以按我的意愿工作。非常感谢@KKRocks
代码:
#import "TabBarController.h"
@interface TabBarController ()<UITabBarControllerDelegate>
@end
@implementation TabBarController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.delegate = self;
#pragma mark UITabBarController Delegate
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"controller title: %@", viewController.title);
if ([viewController.title isEqual:@"More"])
[self.navigationController setNavigationBarHidden: YES animated: NO];
在 Swift 中:
class TabBarController: UITabBarController, UITabBarControllerDelegate
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
self.delegate = self
// MARK: UITabBarController Delegate
func tabBarController(_ tabBarController: UITabBarController, didSelectViewController viewController: UIViewController)
print("controller class: \(String(describing: viewController.self))")
print("controller title: \(String(describing: viewController.title))")
if viewController.title?.isEqual("More")
navigationController?.setNavigationBarHidden(true, animated: false)
现在它工作得很好。 :)
【讨论】:
以上是关于TabBarController 的自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章
pushViewController 使用 hidesBottomBarWhenPushed (iphone6) 导致自动布局问题
TabBarController 添加自定义按钮不可点击问题[重复]
从自定义 UIViewController 导航到 TabBarController 而不使用 segue