Custom background image on UIToolbar in IOS5 SDK

后端 未结 5 509
轮回少年
轮回少年 2020-12-12 22:35

Downloaded IOS5 SDK yesterday, and this code which I use to set my UIToolbar\'s background to a custom image stopped working. If I set the target to IOS4.3 and below it stil

相关标签:
5条回答
  • 2020-12-12 23:10

    Suppose you linked iOS5 beta SDK, you could do something like this

    if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
            //iOS 5 new UINavigationBar custom background
            [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
    } 
    

    To realize this, take a look at here iOS 4.3 to iOS 5.0 API Differences and search for "UINavigationBar.h"

    or take a close look at the new method signature here setBackgroundImage:forBarMetrics:

    Also here is the UIBarMetrics enum type

    Hope this helps.

    0 讨论(0)
  • 2020-12-12 23:15

    This worked on my toolbar:

    //toolBar background image set based on iOS version
        [[UIDevice currentDevice] systemVersion];
    
        if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {
    
            //iOS 5
            UIImage *toolBarIMG = [UIImage imageNamed: @"toolBar_brown.png"];  
    
            if ([toolBar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) { 
                [toolBar setBackgroundImage:toolBarIMG forToolbarPosition:0 barMetrics:0]; 
            }
    
        } else {
    
            //iOS 4
            [toolBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolBar_brown.png"]] autorelease] atIndex:0]; 
    
        }
    
    0 讨论(0)
  • 2020-12-12 23:18

    This is along the same line as Simone's answer, but works for iOS 5 and iOS < 5. This is what I'm using in app. You need to call [UINavigationBar setupIos5PlusNavBarImage] somewhere in your app initialization (applicationDidFinishLaunching: is a good candidate). On iOS 5+, setupIos5PlusNavBarImage will use the new UIAppearance protocol to set the background and the drawRect override will be ignored. On iOS < 5, setupIos5PlusNavBarImage will basically be a no-op and the drawRect will handle drawing the image.

    Interface:

    @interface UINavigationBar (CustomNavigationBar)
    
    + (void) setupIos5PlusNavBarImage;
    
    - (void) drawRect: (CGRect) rect;
    
    @end
    

    Implementation:

    @implementation UINavigationBar (CustomNavigationBar)
    
    + (void) setupIos5PlusNavBarImage
    {
        if ([UINavigationBar respondsToSelector: @selector(appearance)])
        {
            [[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"menuBar.png"] forBarMetrics: UIBarMetricsDefault];
        }
    }
    
    - (void) drawRect: (CGRect) rect
    {
        UIImage* img = [UIImage imageNamed: @"menuBar.png"];
        [img drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    }
    
    @end
    
    0 讨论(0)
  • 2020-12-12 23:30

    This method is not documented and relies on specific subviews structure of UIToolbar which can be changed from version to version. So that exactly what probably happened with iOS5 release

    P.S. If you check updated UIToolBar class reference you'll find another way to customize UIToolBar

    0 讨论(0)
  • 2020-12-12 23:34

    You can use: [[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault]; (new in iOS 5)

    0 讨论(0)
提交回复
热议问题