在iOS 7中忽略了hidesBottomBarWhenPushed。

8

在iOS 7之前,这段代码是可以正常工作的。我正在将一个UIViewControllerhidesBottomBarWhenPushed设置为YES,作为UINavigationControllerrootViewController。但是,选项卡栏仍然会显示出来。下面是相关的代码:

Login *lv = [[Login alloc] init];
lv.HowToUseShows = showHowToUse;
lv.hidesBottomBarWhenPushed = YES;

UINavigationController *BokShelfNav = [[UINavigationController alloc] initWithRootViewController:lv];

//... 

UITabBarController *tbController = [[UITabBarController alloc] init];
tbController.viewControllers = @[BokShelfNav,...];

有类似问题的人吗?

你将HideBottomBarWhenPushed设置为YES。这意味着在呈现此视图时隐藏选项卡栏。如果您希望选项卡栏出现,请尝试删除此行代码 lv.hidesBottomBarWhenPushed = YES; - Priyatham51
抱歉@Priyatham51,我觉得我没有表达清楚,问题是该条正在显示,而我希望它被隐藏。 - JP Illanes
1
是的,我现有的代码也遇到了同样的问题。 - Piyush Hirpara
@PiyushHirpara 很高兴知道我不是唯一一个遇到这个问题的人,你有什么解决办法吗? - JP Illanes
3个回答

25

我发现在调用方法和设置属性的顺序上有影响,这会影响选项卡栏是否显示。

如果我将self.hidesBottomBarWhenPushed = YES;放在即将推出的视图控制器的viewDidLoad方法中,选项卡栏仍然会显示。但是,如果我将其移至init方法中,则选项卡栏会像在iOS 6上一样隐藏。


这似乎是解决这个问题的更好方法。将工单重新分配给您。 - JP Illanes
如果init函数被调用,那么这很好,但是对于由storyboard创建的UITableViewController,init函数并没有被调用。 - mdebeus
1
对于 Interface Builder 对象,将调用 -initWithCoder: 代替 -init - CIFilter
1
将它放在初始化器中,这对我帮助很大,差不多三年后。官方文档应该注意到这种行为。 - northdig

2

我找到的唯一解决方法是让tabBarController从另一个标签页开始([tbController setSelectedIndex:1];),然后,在该标签页的ViewController中的viewWillAppear:方法中执行[tbController setSelectedIndex:0];


是的,也许这对我也有用。我也注意到,如果你在带有选项卡栏的屏幕上,并推到下一个屏幕,当你回到该屏幕时,选项卡栏会隐藏。 - Piyush Hirpara

1

我已经在push语句之后设置了setSelectedIndex,它起作用了。

//created tabbar controller object

if(index==0)
    [tabbarcontroller setSelectedIndex:1];

[self.navigationcontroller pushViewcontroller:tabbarcontroller anmated:YES];
[tabbarcontroller setSelectedIndex:index];

唯一的问题是,如果您将控制器显示在0索引处,它将显示。在这种情况下,我首先将mt tabbarcontroller的索引设置为1(与0不同)。它有效。

是的,这也应该可以,可能两个答案都是正确的,所以我把票给你了 ;)。 - JP Illanes
你能详细说明一下你是怎么让它工作的吗?我有一个自定义UITabBar,选择另一个标签并返回时对我没有效果... - MichaelScaria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接