我有以下视图层次结构:
标签栏控制器 - >导航控制器 - >自定义视图控制器
在我的自定义视图中,我希望TabBar消失并显示工具栏。与按下'选择'
中的iOS7原生照片应用程序非常相似我尝试了不同的解决方案,但我设法得到了:
与我发现的其他解决方案的不同之处在于,我需要在点击时发生这种情况而不是推送。
我尝试过的一些事情:
// #1
[self.navigationController.toolbar setHidden:!isSelecting];
[self.tabBarController.tabBar setHidden:isSelecting];
// #2
self.hidesBottomBarWhenPushed = YES;
// #3
#1 & #2 variants @ different controller along the path
答案 0 :(得分:6)
最终,在玩完设置后,我设法让它发挥作用。我不确定为什么它现在有用而且之前没有用,所以我很感激你的意见。
<强>故事板:强>
<强>代码:强>
在按钮上单击隐藏/取消隐藏tabBar:[self.tabBarController.tabBar setHidden:state]
这几乎可行。按下按钮时它会隐藏/取消隐藏tabBar,但唯一的问题是切换标签时最初会隐藏tabBar。我不得不做一些额外的努力让它可见。
设置UITabBarControllerDelegate
以在切换标签时取消隐藏tabBar。我是在自定义SUSourceTabController
中完成的:
- (void)viewDidLoad
{
[super viewDidLoad];
self.delegate = self;
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController: (UIViewController *)viewController
{
[self.tabBar setHidden:NO];
}
我们还需要取消隐藏自定义视图控制器代码中的第一个选项卡视图。在代码中的任何其他位置使用setHidden:NO
都无效。
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tabBarController.tabBar setHidden:NO];
}
答案 1 :(得分:0)
从question的答案中查看此类别。
的UITabBarController + HideTabbar.h
#import <UIKit/UIKit.h>
@interface UITabBarController (HideTabbar)
- (void)setHidden:(BOOL)hidden animated:(BOOL)animated;
@end
的UITabBarController + HideTabbar.m
#import "UITabBarController+HideTabbar.h"
#define kAnimationDuration .3
@implementation UITabBarController (HideTabbar)
- (void)setHidden:(BOOL)hidden animated:(BOOL)animated
{
CGRect screenRect = [[UIScreen mainScreen] bounds];
float fHeight = screenRect.size.height;
if (UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
fHeight = screenRect.size.width;
}
if (!hidden) {
fHeight -= self.tabBar.frame.size.height;
}
CGFloat animationDuration = animated ? kAnimationDuration : 0.f;
[UIView animateWithDuration:animationDuration animations:^{
for (UIView *view in self.view.subviews){
if ([view isKindOfClass:[UITabBar class]]) {
[view setFrame:CGRectMake(view.frame.origin.x, fHeight, view.frame.size.width, view.frame.size.height)];
}
else {
if (hidden) {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
}
}
}
} completion:^(BOOL finished){
if (!hidden){
[UIView animateWithDuration:animationDuration animations:^{
for(UIView *view in self.view.subviews) {
if (![view isKindOfClass:[UITabBar class]]) {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, fHeight)];
}
}
}];
}
}];
}
@end