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)