当导航回父视图控制器-iOS时,UI按钮位于选项卡栏后面
我有2个当导航回父视图控制器-iOS时,UI按钮位于选项卡栏后面,ios,objective-c,uibutton,uitabbarcontroller,uitabbar,Ios,Objective C,Uibutton,Uitabbarcontroller,Uitabbar,我有2个ui按钮s,我已将它们放置在我的选项卡上,其中也嵌入了导航控制器 在最后一个ViewController(在导航控制器堆栈中)中,我必须隐藏选项卡栏,我已经成功地实现了这一点 问题是,当我导航回parentViewController时,ui按钮在选项卡栏后面(参见下面的GIF图像): 红色记录按钮和红色“保留”按钮是ui按钮,而不是选项卡按钮 这就是我在我的选项卡视图控制器中添加ui按钮的方式: self.button1 = [UIButton buttonWithType:UIBu
ui按钮
s,我已将它们放置在我的选项卡上,其中也嵌入了导航控制器
在最后一个ViewController(在导航控制器堆栈中)中,我必须隐藏选项卡栏,我已经成功地实现了这一点
问题是,当我导航回parentViewController
时,ui按钮
在选项卡栏后面(参见下面的GIF图像):
红色记录按钮和红色“保留”按钮是ui按钮
,而不是选项卡按钮
这就是我在我的选项卡视图控制器中添加ui按钮的方式:
self.button1 = [UIButton buttonWithType:UIButtonTypeCustom];
[self.button1 addTarget:self action:@selector(recordButtonClick:) forControlEvents:UIControlEventTouchUpInside];
self.button1.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;
self.button1.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
[self.button1 setBackgroundImage:[UIImage imageNamed:@"bar_button_record"] forState:UIControlStateNormal];
heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
if (heightDifference < 0)
self.button1.center = self.tabBar.center;
else
{
CGPoint center = self.tabBar.center;
center.y = center.y - heightDifference/2.0 - 0;
self.button1.center = center;
}
[self.view addSubview:self.button1];
上述函数返回的YES
隐藏了选项卡栏,但它使按钮在转到上一个视图控制器时位于选项卡栏后面。
如果我将其更改为NO
,则按钮不会位于tabBar
后面,而且tabBar
不会隐藏在最后一个viewController
上
请建议一种方法,或者用另一种方法隐藏tabBar,或者将那些ui按钮带到前面
谢谢 视图布局时,您是否尝试将按钮置于前面
比如说
self.view.bringSubviewToFront(self.button1)
或者在选项卡栏上方实例化它
self.view.insertSubview(self.button1, aboveSubview: self.tabBar)
当视图布局时,您是否尝试将按钮置于前面
比如说
self.view.bringSubviewToFront(self.button1)
或者在选项卡栏上方实例化它
self.view.insertSubview(self.button1, aboveSubview: self.tabBar)
好了,找到解决办法了!而不是隐藏选项卡栏
- (BOOL)hidesBottomBarWhenPushed {
return YES;
}
通过上一个视图控制器中的[tabBarController.tabBar setHidden:YES]
隐藏选项卡栏
。然后在返回时,执行[tabBarController.tabBar setHidden:NO]视图中的code>将消失
这样,tabBarController
中的子视图安排保持不变:)好的,找到了解决方案!而不是隐藏选项卡栏
- (BOOL)hidesBottomBarWhenPushed {
return YES;
}
通过上一个视图控制器中的[tabBarController.tabBar setHidden:YES]
隐藏选项卡栏
。然后在返回时,执行[tabBarController.tabBar setHidden:NO]视图中的code>将消失
这样,tabBarController
中的子视图
排列保持不变:)尝试了@Sha-answer,此外,这也是我成功运行它的方法
确保在上次查看控制器中添加此代码
var tabbarViewController: tabbarViewController?
var tabbarHoldonFrame = CGRect()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.hideTabbar()
}
func hideTabbar() {
// get instance of tabbar controller
tabbarViewController = self.navigationController?.tabBarController as? tabbarViewController
// hide tabbar
tabbarViewController?.tabBar.isHidden = true
// hide your additional button placed above tabbar
tabbarViewController?.buttonCreateContest.isHidden = true
// hold it's frame in tabbarHoldonFrame, set zero temporarily
tabbarHoldonFrame = (tabbarViewController?.tabBar.frame)!
tabbarViewController?.tabBar.frame = CGRect.zero
}
override func viewWillDisappear(_ animated: Bool) {
self.showTabbar()
}
func showTabbar() {
// show it
tabbarViewController?.tabBar.isHidden = false
// show your button
tabbarViewController?.buttonCreateContest.isHidden = false
// add default frame
tabbarViewController?.tabBar.frame = tabbarHoldonFrame
}
尝试了@Sha-answer,另外,这也是我成功运行它的原因
确保在上次查看控制器中添加此代码
var tabbarViewController: tabbarViewController?
var tabbarHoldonFrame = CGRect()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.hideTabbar()
}
func hideTabbar() {
// get instance of tabbar controller
tabbarViewController = self.navigationController?.tabBarController as? tabbarViewController
// hide tabbar
tabbarViewController?.tabBar.isHidden = true
// hide your additional button placed above tabbar
tabbarViewController?.buttonCreateContest.isHidden = true
// hold it's frame in tabbarHoldonFrame, set zero temporarily
tabbarHoldonFrame = (tabbarViewController?.tabBar.frame)!
tabbarViewController?.tabBar.frame = CGRect.zero
}
override func viewWillDisappear(_ animated: Bool) {
self.showTabbar()
}
func showTabbar() {
// show it
tabbarViewController?.tabBar.isHidden = false
// show your button
tabbarViewController?.buttonCreateContest.isHidden = false
// add default frame
tabbarViewController?.tabBar.frame = tabbarHoldonFrame
}
在自定义选项卡栏控制器中添加以下方法,以解决自定义按钮位于选项卡栏后面的问题
目标C代码:
-(void)viewDidLayoutSubviews {
if (self.centerButton != nil) {
[self.view bringSubviewToFront:self.centerButton];
for (UIView *vw in self.view.subviews) {
if ([vw isKindOfClass:[UITabBar class]]){
if(vw.hidden){
self.centerButton.hidden = true;
}
else {
self.centerButton.hidden = false;
}
}
}
}
}
Swift代码:
override func viewDidLayoutSubviews() {
if self.centerButton != nil {
self.view.bringSubview(toFront: self.centerButton)
for vw in self.view.subviews {
if let subView = vw as? UITabBar {
if subView.isHidden == true {
self.centerButton.isHidden = true
} else {
self.centerButton.isHidden = false
}
}
}
}
}
它只是有点慢,当视图从“隐藏”更改为“显示”或“显示”更改为“隐藏”时,会有大约0.5秒的延迟。在自定义选项卡栏控制器中添加以下方法,以解决自定义按钮位于选项卡栏后面的问题
目标C代码:
-(void)viewDidLayoutSubviews {
if (self.centerButton != nil) {
[self.view bringSubviewToFront:self.centerButton];
for (UIView *vw in self.view.subviews) {
if ([vw isKindOfClass:[UITabBar class]]){
if(vw.hidden){
self.centerButton.hidden = true;
}
else {
self.centerButton.hidden = false;
}
}
}
}
}
Swift代码:
override func viewDidLayoutSubviews() {
if self.centerButton != nil {
self.view.bringSubview(toFront: self.centerButton)
for vw in self.view.subviews {
if let subView = vw as? UITabBar {
if subView.isHidden == true {
self.centerButton.isHidden = true
} else {
self.centerButton.isHidden = false
}
}
}
}
}
只是有点慢,当视图从“隐藏”更改为“显示”或“显示”更改为“隐藏”时,会有大约0.5秒的延迟。1.5年前已经提供了答案。如果你觉得有用,请投它一票。谢谢。如果用户可以隐藏视图中的显示,则将显示/视图将消失(self.tabBarController作为?CustomTabbarViewController)?.centerButton?.ishiden=false/true。centerButton在0.5秒延迟时间内工作正常。答案已在1.5年前提供。如果你觉得有用,请投它一票。谢谢。如果用户可以隐藏视图中的显示,则将显示/视图将消失(self.tabBarController作为?CustomTabbarViewController)?.centerButton?.ishiden=false/true。中心按钮在0.5秒延迟时间内工作正常。谢谢!这修复了我们完全相同的问题,一个按钮只有在返回时才被选项卡栏隐藏。谢谢!这修复了我们完全相同的问题,只有在返回时选项卡栏才会隐藏一个按钮。