Get the right color in iOS7 translucent navigation bar

后端 未结 20 1275
囚心锁ツ
囚心锁ツ 2020-11-28 00:59

How can I get the right coloring for my translucent navigation bars in iOS 7? The navigation bar just adjusts the given color to a much brighter one. Changing brightness or

20条回答
  •  生来不讨喜
    2020-11-28 01:32

    The bar will adjust your color values.

    Preferred method, for RGB >= 40 only, will give the most blurring

    You can use this calculator and put in what you want the color to be when rendered on screen, it will tell you what to set the color of the barTintColor so when Apple adjusts it, it will show as intended

    https://www.transpire.com/insights/blog/bar-color-calculator/

    Edit: Note that these calculations are for a white background, and for lighter colours (rgb over 40, if you need darker, you will need to add a background layer like others have mentioned - although that will reduce the bar's blur)

    In depth guide: https://www.transpire.com/insights/blog/custom-ui-navigationbar-colors-ios7/

    Snippet:

    @interface UnderlayNavigationBar : UINavigationBar
    
    @end
    

    .

    @interface UnderlayNavigationBar ()
    {
        UIView* _underlayView;
    }
    
    - (UIView*) underlayView;
    
    @end
    
    @implementation UnderlayNavigationBar
    
    - (void) didAddSubview:(UIView *)subview
    {
        [super didAddSubview:subview];
    
        if(subview != _underlayView)
        {
            UIView* underlayView = self.underlayView;
            [underlayView removeFromSuperview];
            [self insertSubview:underlayView atIndex:1];
        }
    }
    
    - (UIView*) underlayView
    {
        if(_underlayView == nil)
        {
            const CGFloat statusBarHeight = 20;    //  Make this dynamic in your own code...
            const CGSize selfSize = self.frame.size;
    
            _underlayView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, selfSize.width, selfSize.height + statusBarHeight)];
            [_underlayView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
            [_underlayView setBackgroundColor:[UIColor colorWithRed:0.0f green:0.34f blue:0.62f alpha:1.0f]];
            [_underlayView setAlpha:0.36f];
            [_underlayView setUserInteractionEnabled:NO];
        }
    
        return _underlayView;
    }
    
    @end
    

    .

    UIViewController* rootViewController = ...;
    UINavigationController* navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[UnderlayNavigationBar class] toolbarClass:nil];
    [navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:0.0f green:0.0f blue:90.0f/255.0f alpha:1]];
    [navigationController setViewControllers:@[rootViewController]];
    

提交回复
热议问题