繁体   English   中英

iOS:状态栏和导航栏:空格或参考底图

[英]iOS: Status bar and Navigation bar: Space or Underlaying

如何规范操作状态栏和导航?

因此,我的目标是同时隐藏和显示状态栏和导航栏。

我应该以规范的方式进行操作,避免它们之间留出空间,避免出现底纹(状态栏位于导航栏上)并支持正常旋转?

我玩过它,现在有了代码:

-(void)tryToManipulateWithTopBarsIsHidden:(BOOL)hidden{
    if (self.wantsFullScreenLayout) {

        // Get status bar height if visible

        CGFloat statusBarHeight = 0;
        [self topBarsHiddenStateAppearingOrDisappearingStatusBarHidden:hidden
                                                   navigationBarHidden:hidden];
        // Get status bar height if visible
        if (![UIApplication sharedApplication].statusBarHidden) {
            CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
            statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width);
//            statusBarOrigin = MIN(statusBarFrame.origin.x,statusBarFrame.origin.y);
        }

        // Set navigation bar frame
        // if status bar is visible and
        // nav bar origin in y is not the same as status bar (magic, really)
        // we need to set nav bar origin y to status bar origin y (auto shifting to bottom)
        CGRect navBarFrame = self.navigationController.navigationBar.frame;
        // if status bar is visible
        if (![UIApplication sharedApplication].statusBarHidden){
            navBarFrame.origin.y = statusBarHeight;
            navBarFrame = CGRectOffset(navBarFrame, 0.0, -20.0);
            self.navigationController.navigationBar.frame = navBarFrame;
        }
        self.navigationController.navigationBar.hidden =[UIApplication sharedApplication].statusBarHidden ;
        LogRect(@"this is statusBar ", [UIApplication sharedApplication].statusBarFrame);
        LogRect(@"this is navigationBar ", navBarFrame);
    }
}

- (void)setTopBarStatusBarHidden:(BOOL)hidden onCompletion:(void(^)(UINavigationBar*))completion andNavigationBar:(UINavigationBar*)bar{
    [[UIApplication sharedApplication] setStatusBarHidden:hidden];
    completion(bar);
}

- (void)setTopBarNavBarHidden:(BOOL)hidden{
    [self.navigationController setNavigationBarHidden:hidden animated:NO];
}

- (void)topBarsHiddenStateAppearingOrDisappearingStatusBarHidden:(BOOL)statusBarHidden
                                             navigationBarHidden:(BOOL)navigationBarHidden{

    UINavigationBar* bar = self.navigationController.navigationBar;
    id fles = self;
    [self setTopBarStatusBarHidden:statusBarHidden
                      onCompletion:^(UINavigationBar *bar) {
                          if (statusBarHidden){
                              [fles setTopBarNavBarHidden:navigationBarHidden];
                          }
                          else
                              [fles setTopBarNavBarHidden:navigationBarHidden];

                      }
                  andNavigationBar:bar];
}

但是什么都没有!

谁能解释在没有混乱的情况下解决该任务的方法(真的是不起作用的代码)吗?

您只需编写方法:

self.navigationController.navigationBar.hidden = YES;
[UIApplication sharedApplication].statusBarHidden = YES;

这将同时隐藏导航栏和状态栏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM