美文网首页
导航条、状态栏的设置

导航条、状态栏的设置

作者: 不辣先生 | 来源:发表于2019-12-11 15:44 被阅读0次

    感觉这种UI的东西苹果底层经常会变,可能系统过几个版本又不同了(比如kvc设值的方式),无力吐槽真的,还是记录一下

    关于状态栏隐藏和显示问题

    1、全局隐藏或者修改状态栏的文字颜色

    在info.plist 文件:将View controller-based status bar appearance 的值设置为NO

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    2、单独界面设置
    在info.plist 文件:将View controller-based status bar appearance 的值设置为YES

    - (UIStatusBarStyle)preferredStatusBarStyle{
    
        return self.topViewController.preferredStatusBarStyle;
    }
    

    warn:如果viewcontroller是嵌套在导航控制器之下,需在导航控制器中设置

    3、自定义背景颜色

    下面的方法iOS 13 会崩溃

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
    statusBar.backgroundColor = [UIColor cyanColor];
    }
    

    取代方法是直接加一层

    CGFloat stateBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
    UIView *customBState = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, stateBarHeight)];
    customBState.backgroundColor = [UIColor greenColor];
    [self.view addSubview:customBState];
    [self.view bringSubviewToFront:customBState];
    

    如果在嵌套有导航控制器的情况下,请在viewcontroller对应的导航控制器中添加这一层

    导航栏

    self.navigationBar.barTintColor = [UIColor purpleColor];//背景色
    [self.navigationBar setBackgroundImage:[self createImageWithColor:UIColor.redColor] forBarMetrics:UIBarMetricsDefault];//背景图处理颜色
    self.navigationBar.shadowImage = [self createImageWithColor:UIColor.grayColor];//添加阴影,前提是调用了setBackgroundImage:,不然无效
    
    self.navigationBar.tintColor = [UIColor greenColor];//按钮及其文字颜色
        //标题文字字体、大小和颜色
    [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : kColorWithRGBA(26, 26, 26, 1),
    NSFontAttributeName : [UIFont fontWithName:@"PingFangSC-Medium" size:18]}];
    //调整标题垂直方向的位置
    [self.navigationBar setTitleVerticalPositionAdjustment:-10 forBarMetrics:UIBarMetricsDefault];
    //属性为YES,则UINavigationController其topViewControll.view是包含UINavigationBar和UIStatusBar下面覆盖的那片区域的。但若translucent属性为NO,则除非设置controller的extendedLayoutIncludesOpaqueBars属性为YES,topViewControll.view都是不包含此区域的
     [self.navigationBar setTranslucent:YES];
    

    导航条返回按钮位置的调整->自定义返回按钮(还可以做各种文字图片排版)

    UIButton * leftBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    leftBtn.frame = CGRectMake(0, 0, 25,25);
    [leftBtn setBackgroundImage:[UIImage imageNamed:@"icon_back"] forState:UIControlStateNormal];
    [leftBtn addTarget:self action:@selector(leftBarBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem * leftBarBtn = [[UIBarButtonItem alloc]initWithCustomView:leftBtn];;
    //创建UIBarButtonSystemItemFixedSpace
    UIBarButtonItem * spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    //将宽度设为负值
    spaceItem.width = -15;
    //将两个BarButtonItem都返回给NavigationItem
    self.navigationItem.leftBarButtonItems = @[spaceItem,leftBarBtn];
    

    warin:自定义了返回按钮会导致自带的侧换全屏返回失效,解决方案自定义导航栏后侧滑返回功能失效
    ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色
    Swift - 动态改变状态栏statusBar文字颜色(preferredStatusBarStyle无效问题

    相关文章

      网友评论

          本文标题:导航条、状态栏的设置

          本文链接:https://www.haomeiwen.com/subject/vaoqsqtx.html