UINavigationBar自定义

本文详细介绍了如何在iOS应用中自定义Navigation Bar的背景图片,包括在不同版本的iOS系统上的实现方法,以及如何通过XIB文件和分类来完成自定义。同时提供了实例代码演示,帮助开发者轻松实现导航栏的个性化设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近在网络上看到了很多NavigationBar的自定义,主要是关于更换背景图片的。

     苹果官方给出了一个方法,非常方便:

- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics

     但是注意,这需要IOS 5的方法,那么IOS 5之前的版本要怎么办? 

     简单的背景图片可以直接修改tintColor属性,复杂一些的可以参考如下方法。

     -------------------------------------!!!!!!!!--------------------------------------------

     第一步: 先建一个xib文件,自己看图:

     

    第二步:   这个建立完了,接下来你要写一个UINavigationController的初始化方法。我们写个分类。

    注:这个方法代替了初始化方法

@interface UINavigationController (Custom)

+ (id)customNavigationControllerWithRootViewController:(UIViewController *)rootViewController;

@end
@implementation UINavigationController (Custom)

+ (id)customNavigationControllerWithRootViewController:(UIViewController *)rootViewController
{
    UINavigationController *nav = [[[NSBundle mainBundle] loadNibNamed:@"NavigationController" owner:self options:nil] objectAtIndex:0];
    [nav setViewControllers:[NSArray arrayWithObject:rootViewController]];
    return nav;
}

@end

     

    第三步: 接下来导入你的开源代码,比如我找了个设置NavigationBar背景的代码并导入了我的工程。

   

    注:名称是CustomNavigationBar,打开你的XIB文件,选中NavigationBar,修改它的Class项内容,看图:

    

    这样一来,NavigationBar和NavigationController 以及XIB全部都对应上了!

    下面你就开始工作了,代码直接看图吧:   

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

   self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

   //这里
   RootViewController *rootVC = [[RootViewController alloc]init];
    UINavigationController *nav = [UINavigationController customNavigationControllerWithRootViewController:rootVC];
    self.window.rootViewController =nav;
   //结束

    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleBlackOpaque];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}   

    接下来进RootViewController.m里开始设置NavigationBar的背景,首先要强转一下系统默认的UINavigationBar,然后你就可以调NavigationBar里的方法了:

- (void) customizeNavBar {
    CustomNavigationBar *navBar = (CustomNavigationBar *)self.navigationController.navigationBar;

    //下面调CustomNavigationBar的方法了
}

  

 最后:   

      为什么要这么费事。。。。因为它是只读的属性,所以我们通过修改XIB的方法。

     @property(nonatomic,readonly) UINavigationBar *navigationBar; 

   当然方法还有很多,我只是抛砖引玉。网上代码非常多,还有给navigationBar加阴影的,设置圆角的等。大家可以去网络上找,我就不举例了。

   总之,

   准备时:

   直接把自定义的navigationBar的.h和.m拖进工程,在我们弄好的xib里修改navigationBar的Class名称,使之保持一致。最后使

   使用时:

   用分类创建的方法初始化加载这个xib,然后在对应的ViewController里强转navigationBar,然后就可以调用自定义的navigationBar对应的方法了。

     先写到这里吧!

转载于:https://my.oschina.net/lvlove/blog/102651

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值