UITabBarController 自定义按钮在移动到下一个 ViewController 时不隐藏
Posted
技术标签:
【中文标题】UITabBarController 自定义按钮在移动到下一个 ViewController 时不隐藏【英文标题】:UITabBarController Custom Button not hiding while moving to next ViewController 【发布时间】:2017-03-09 07:08:47 【问题描述】:我在UITabBarViewController中添加了自定义中心按钮,代码如下...
self.centerButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.centerButton.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;
self.centerButton.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
[self.centerButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[self.centerButton setBackgroundImage:highlightImage forState:UIControlStateHighlighted];
CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
if (heightDifference < 0)
self.centerButton.center = self.tabBar.center;
else
CGPoint center = self.tabBar.center;
center.y = center.y - heightDifference/2.0;
self.centerButton.center = center;
[self.centerButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.centerButton];
请查看随附的屏幕截图以供参考,
现在,当我在移动到其他视图控制器时尝试隐藏它时,只有标签栏被隐藏,而不是带有以下代码的中心自定义按钮,
[self.tabBarController.tabBar setHidden:YES];
也试过这样隐藏中心自定义按钮,
WBTabBarController *objWBTab = [self.storyboard instantiateViewControllerWithIdentifier:ID_CNTRL_TABBAR];
[objWBTab setTabBarHidden:YES];
SetTabBarHidden 已在 WBTabBarController.m 中定义如下,
- (void)setTabBarHidden:(BOOL)tabBarHidden
self.centerButton.hidden = tabBarHidden;
self.tabBar.hidden = tabBarHidden;
还是不行,谁能帮帮我?
【问题讨论】:
为什么不直接将UIButton
添加为标签栏的子视图而不是self.view
?
由于自定义按钮的高度较大,所以我必须在 self.view 中添加它,我不能在标签栏中添加它
那么将剪辑的边界设置为标签栏的假不是做同样的事情吗?就像按钮可以在标签栏的边界之外可见
哦,是的。你是绝对正确的。我试过这个。但是通过在标签栏中添加它..我的按钮不再显示。如果你能帮我多一点就好了..
好吧好吧..我明白了。框架正在创建问题。因此,之前它已添加到 self.view 中,现在它位于 tabar 中。所以我需要稍微修改一下帧逻辑。非常感谢你的帮助!你节省了我的时间。谢谢
【参考方案1】:
这是因为您将按钮作为子视图添加到整个视图而不是 tabBar 的视图。
将[self.view addSubview:self.centerButton];
换成[self.tabBar addSubview:self.centerButton];
【讨论】:
自定义按钮未添加到我的底部栏中。在tabbarviewcontroller的self.view中添加。所以如果我要隐藏底部栏,自定义按钮将不会被隐藏。由于自定义按钮的高度较大,因此我必须将其添加到 self.view 中,而无法将其添加到选项卡中【参考方案2】:尝试在 Push 上检查 Hide Bottom Bar 以使您的 ViewController 在情节提要上打开
或者你也可以通过编程方式使用它
self.hidesBottomBarWhenPushed = true
let destinationVC = self.storyboard?.instantiateViewControllerWithIdentifier("StoryBoardID") as! yourVC
self.navigationController?.pushViewController(destinationVC, animated: true)
self.hidesBottomBarWhenPushed = false
【讨论】:
【参考方案3】:让我们在视图消失时尝试隐藏它
-(void) viewWillDisappear:(BOOL)animated
[self setTabBarHidden:YES];
[super viewWillDisappear:animated];
并在视图出现时显示
-(void) viewWillAppear:(BOOL)animated
[self setTabBarHidden:NO];
[super viewWillAppear];
【讨论】:
viewWillDisappear 在从 tabbarcontroller 移动到其他 viewcontroller 时没有被调用 :(以上是关于UITabBarController 自定义按钮在移动到下一个 ViewController 时不隐藏的主要内容,如果未能解决你的问题,请参考以下文章
自定义标签栏按钮,而不是 UITabBarController
为啥由 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器
在 UITabBarController 中自定义更多选项卡