iOS 导航栏设置

这篇博客介绍了如何在iOS13及以上版本使用UINavigationBarAppearance API来定制导航栏的外观,包括背景图片、标题样式、Done按钮样式,并提供了代码示例。同时,解释了standardAppearance和scrollEdgeAppearance的区别,以及在导航栏中添加按钮的方法。
摘要由CSDN通过智能技术生成
  • 导航栏右侧的Done按钮怎么是蓝色的?
  • 导航栏右侧按钮大小设置
  • 导航栏标题按钮样式设置
  • 导航栏设置颜色
  • 导航栏变白不显示颜色?

iOS 13 之后使用新的API和类(UINavigationBarAppearance)来设置导航栏的标题大小,颜色,字体;导航栏的颜色;导航栏按钮样式。

#import "MMBaseNavigationController.h"

@interface MMBaseNavigationController ()

@end

@implementation MMBaseNavigationController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    
    /// Config the navigation bar appearance
    
    if (@available(iOS 13.0, *)) {
        UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
        // Navigation bar background image
        appearance.backgroundImage = [UIImage imageNamed:@"top"];
        // Navigation bar title
        appearance.titleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor whiteColor]};

        // Config the done button appearance
        UIBarButtonItemAppearance *doneAppearance = [[UIBarButtonItemAppearance alloc] init];
        doneAppearance.normal.titleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:16],NSForegroundColorAttributeName:[UIColor whiteColor]};
        appearance.doneButtonAppearance = doneAppearance;
        
        self.navigationBar.standardAppearance = appearance;
        self.navigationBar.scrollEdgeAppearance = appearance;
    }
    else {
        [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"top"] forBarMetrics:UIBarMetricsDefault];
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
    }

@end
  • standardAppearance 和 scrollEdgeAppearance

standardAppearance 和 scrollEdgeAppearance 分别是导航栏的标准样式和滚动样式。
什么是标准样式?其实就是静态显示的样式。
什么是滚动样式,就是当导航视图被present出来这种,这时候如果不设置scrollEdgeAppearance的话导航栏颜色就是白色的(iPhone上是这样,iPad的不会出现)。

  • 在Controller中添加导航栏按钮
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(done:)];

注意

  1. self.navigationItem,不小心写成self.navigationController.navigationItem就错了,不是一回事。
  2. style:UIBarButtonItemStyleDone

设置图片

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, 0, 40, 40);
    [button setImage:[UIImage imageNamed:@"back-icon"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    
    UIBarButtonItem *leftBarButtonItem  = [[UIBarButtonItem alloc] initWithCustomView:button];
    self.navigationItem.leftBarButtonItem = leftBarButtonItem;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值