关于UINavigationBar

navigationBar : 他是导航条上的一个控件。

在开发过程中,我遇见了许多与navigationBar有关的设置:
(1)设置导航条透明,类似:百度外卖、QQ音乐。
   UINavigationBar *navBar = self.navigationBar;
   navBar.translucent = YES;
   [navBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsCompact];

这样可以设置navigationBar为透明;

⚠️但是你会发现有一条尴尬的黑的“底线”:
#pragma mark - 隐藏黑线
- (void)setNavLineHidden:(BOOL)hidden {
    UIImageView *imageview = [self getNavBarBottomLineWith:self.navigationBar];
    imageview.hidden = hidden;
}

/** 找到navbar下面的黑线*/
- (UIImageView *)getNavBarBottomLineWith:(UIView *)superview {
    if ([superview isKindOfClass:[UIImageView class]] && superview.frame.size.height <= 1.0) {
        return (UIImageView *)superview;
    }
    
    for (UIView *subview in superview.subviews) {
        UIImageView *imageview = [self getNavBarBottomLineWith:subview];
        if (imageview) {
            return imageview;
        }
    }
    return nil;
}
黑线隐藏掉了;

⚠️但是我又想我的navigationBar可以实现半透明动画(滑动tableview实现navigationBar隐藏或者现实):
    //为了统一设置 状态栏 和 导航条 颜色,设置frame如下
    _aplhaView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, navBar.frame.size.width, navBar.frame.size.height+20)];
    _aplhaView.backgroundColor = [UIColor whiteColor];
    _aplhaView.alpha = 0.0;
    [navBar insertSubview:_aplhaView atIndex:0];

可以通过改变_aplhaView的alpha的值来实现动画效果;

⚠️在实现动画的过程中,我还需要根据navigationBar的背景颜色来动态改变“状态栏”的“文字”颜色;
#pragma mark - system
- (UIStatusBarStyle)preferredStatusBarStyle {

    if (_statusLight) {
        return UIStatusBarStyleLightContent;
    }
    return UIStatusBarStyleDefault;
}
通过该方法可以设置状态栏文字颜色,这是系统调用的方法,如果我们自己调用是没有作用的,在我的需求中,我的导航条颜色改变的同时状态栏也需要改变,这时我们调用:
[self setNeedsStatusBarAppearanceUpdate];//更新状态栏
(2)
(3)
(4)

你可能感兴趣的:(关于UINavigationBar)