zoukankan      html  css  js  c++  java
  • ios5 自定义导航条问题

    在ios5之前的系统中,可以通过定义导航条类别的方式自定义导航条:

    @implementation UINavigationBar (CustomImage)
    - (void)drawRect:(CGRect)rect {
    // Drawing code
    UIImage *image = [[UIImage imageNamed:@"header.png"] retain];
    [image drawInRect:CGRectMake(0, 0,self.frame.size.width , self.frame.size.height)];
    [image release];
    }
    @end


    但在ios5中,这种方式不起作用了。详见ios 5.0发布说明:

    http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-5_0/_index.html#//apple_ref/doc/uid/TP40010949

    在iOS 5中,UINavigationBar, UIToolbar, and UITabBar 的实现方式改变了,因此drawRect:方法不会被调用了。除非在他们的子类中实现。

    因此,要在iOS 5.0中继续使用自定义的导航条,这里提供两种方法:

    1、使用5.0中新提供的UINavigationBar的方法setBackgroundImage:forBarMetrics:来设置背景。

      但是为了与4.0等系统兼容,在使用该方法前必须先进行判断:(在5.0之前的系统中继续使用原来的方法)

      (需要在每个用到navigationbar的地方都调用该方法,可能改动的地方比较多)

    UINavigationBar *navBar = [myNavController navigationBar];
    if ([navBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
    {
    // set globablly for all UINavBars
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"brnlthr_nav.jpg"] forBarMetrics:UIBarMetricsDefault];
      // ...
    }

    2、使用UINavigationBar的子类的方式来实现:(用这种方式可以不用对每个使用navigationbar的地方都进行修改,属于懒人做法)

    @interface MyNavigationBar : UINavigationBar

    @end

    @implementation MyNavigationBar

    - (void)drawRect:(CGRect)rect {
      [super drawRect:rect];
    }
    @end

    @implementation UINavigationBar (LazyNavigationBar)
    + (Class)class {
    return NSClassFromString(@"MyNavigationBar");
    }

    -(void)drawRect:(CGRect)rect {
    UIImage *backImage = [UIImage imageNamed:@"backNav.png"];
     [backImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    }
    @end


    注:参考整理自 http://stackoverflow.com/questions/7657465/uinavigationbars-drawrect-is-not-called-in-ios-5-0

    -------------
    胖叔——zhulin1987.com
  • 相关阅读:
    Emacs教程
    华为上机测试 2015
    奇偶排序
    C语言中的EOF和回车不一样
    jquery 使用方法
    1116
    1115
    1109
    Oracle14~23
    get与post的区别
  • 原文地址:https://www.cnblogs.com/zhulin/p/2219949.html
Copyright © 2011-2022 走看看