using image or tint color on uinavigationbar in iphone?

前端 未结 7 1751
自闭症患者
自闭症患者 2020-12-24 09:58

how do i show a background image on a navigation bar or give tint color to the navigation bar in a native iphone application??

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

    Was looking for this a week ago. Found this over here discussions. apple. com/thread.jspa?threadID=1649012&tstart=0 (sorry won't let me post a real link).

    -(void)setBackgroundImage:(UIImage*)image withTag:(NSInteger)bgTag{
    if(image == NULL){ //might be called with NULL argument
        return;
    }
    UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:image];
    aTabBarBackground.frame = CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
    aTabBarBackground.tag = bgTag;
    [self addSubview:aTabBarBackground];
    [self sendSubviewToBack:aTabBarBackground];
    [aTabBarBackground release];
    }
    /* input: The tag you chose to identify the view */
    -(void)resetBackground:(NSInteger)bgTag {
        [self sendSubviewToBack:[self viewWithTag:bgTag]];
    }
    

    I made this as a category to UINavigationBar. To set it a background image for a UINavigationBar inside a UINavigationBarController, I did this:

    [navigationControllerForChannels.navigationBar setBackgroundImage:[UIImage imageNamed:@"top_bar.png"] withTag:48151623];
    

    I've had some buginess when updating the tab bar, so you'll want to call

    [self.navigationController.navigationBar resetBackground:48151623];
    

    After any modifications to the bar.

    0 讨论(0)
  • 2020-12-24 10:27

    If you use the CGImage solution, you may have a problem with image size:

    CGRect layer=self.navigationController.navigationBar.frame;
    layer.size.height=57.0;
    layer.origin.y=0;
    self.navigationController.navigationBar.frame=layer;
    CGImageRef imageRef         = [UIImage imageNamed:@"myImg.png"].CGImage;
    self.navigationController.navigationBar.layer.contents = (id)imageRef;
    

    It seems to me that the image is streched down, since the layer seems to have a height of 44.0 pixel, but a background image for the UINavigationBar should be at least 57.0.

    If you try to move the layer's frame, all the buttons will move within it.

    0 讨论(0)
  • 2020-12-24 10:29

    You can override UINavigationBar drawRect. The code can be placed to appDelegate.m I've tested it and it's working on 3x and 4x iOS.

    @implementation UINavigationBar (UINavigationBarCategory)
    - (void)drawRect:(CGRect)rect {
        UIColor *color = [UIColor blackColor]; //tint color
        UIImage *img = [UIImage imageNamed: @"navBarBg.png"]; // your image
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
        self.tintColor = color;
     }@end
    
    0 讨论(0)
  • 2020-12-24 10:30

    This's how I did on iOS4:

    #import <QuartzCore/QuartzCore.h> // For .layer 
    
    self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"navigationBarBackgroundImage"].CGImage;
    self.navigationController.navigationBar.tintColor = [UIColor orangeColor];
    

    No need to switch subviews between z-orders (-exchangeSubviewAtIndex:withSubviewAtIndex:), both background image and tintColor set in one line of code, and works with @2x image too.

    0 讨论(0)
  • 2020-12-24 10:33

    For the iOS5 and iOS6 I've used this solutions and it worked perfectly, Making a Universal UINavigationBar Background Image.

    iPhone Retina Portrait 640px x 88px / iPhone Non-Retina Portrait 320px x 44px

    Inside AppDelegate.m

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

    Place this code

    // Set the status bar to black color.
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
    
    // Change @"menubar.png" to the file name of your image.
    UIImage *navBar = [UIImage imageNamed:@"menubar.png"];
    
    [[UINavigationBar appearance] setBackgroundImage:navBar forBarMetrics:UIBarMetricsDefault];
    

    Don't forget to change the image name (menubar.png)

    Check out this link for the full answer http://www.lwxted.com/blog/2012/add-custom-background-image-uinavigationbar-ios-5/

    0 讨论(0)
  • 2020-12-24 10:36

    a background image is going to take a bit more work (you might want to try setting a titleView that's the same size as the bar itself; I haven't tried this myself) or adding a view behind existing subviews. Tint color is easy: navBar.tintColor = [UIColor orangeColor];

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