美文网首页
iOS 导航栏小结

iOS 导航栏小结

作者: _RG | 来源:发表于2018-11-21 16:26 被阅读0次
  1. UIBarButtonItem 和 UINavigationItem

UIBarButtonItem是设置在导航栏左右两端的item,
rightBarButtonItem和leftBarButtonItem就是这个类型

UINavigationItem是用来管理rightBarButtonItem和leftBarButtonItem的,
rightBarButtonItem和leftBarButtonItem都是NavigationItem的一个属性

每个页面都应该用自己的UINavigationItem来管理BarButtonItem
每个页面的barButtonItem都不一样,所以设置时应该用代码

 self.navigationItem.rightBarButtonItem (self表示当前控制器)
或者self.navigationItem.leftBarButtonItem
不要使用self.navigationController.navigationItem.rightBarButtonItem
  1. UINavigationBar 导航栏的一些属性

    2.1 tintColory用来设置导航栏上BarButtonItem的颜色的,
    如果BarButtonItem 是用以下两种方法创建的,则title和Image的颜色都是TintColor设置的颜色

- (instancetype)initWithImage:(UIImage *)image
                        style:(UIBarButtonItemStyle)style
                       target:(id)target
                       action:(SEL)action

- (instancetype)initWithTitle:(NSString *)title
                        style:(UIBarButtonItemStyle)style
                       target:(id)target
                       action:(SEL)action

注意: 如果想要图片为真实图片的颜色, 生成图片时也可以用此方法

[[UIImage imageNamed:@"icon_"] imageWithRenderingMode:(UIImageRenderingModeAlwaysOriginal)]

如果是用 - (instancetype)initWithCustomView:(UIView *)customView 创建, 则颜色只跟customView自己的颜色有关

3.2 translucent属性用来设置导航栏是否有穿透效果, 默认为YES
当translucent设置为YES时, 如果要修改导航栏的颜色,
则用self.navigationBar.barTintColor = [UIColor orangeColor]; (注意self是导航控制器)
但是在translucent为YES时, 设置的背景颜色渲染时会有色差
如果想要导航栏背景颜色没有色差,可将translucent设置为NO

translucent还有一个功能就是在有导航栏的页面,
translucent为NO时,
滚动视图的原点是以导航栏底部为起点,而且通过
self.automaticallyAdjustsScrollViewInsets = NO
或者
if (@available(iOS 11, *)) {
[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}设置也不会改变原点的位置

self.navigationController.navigationBar.translucent = NO;
    
    /*
     下面两个方法的作用:
       1. 在没有导航栏且是滚动视图的页面,可以使滚动视图的顶部和状态栏重合
       2. 在有导航栏且为滚动视图的页面, 可以使滚动视图的原点为屏幕的原点,而不是导航栏底部为原点
     注意: 如果导航栏的translucent为NO时, 作用2会无效
     */
    
    self.automaticallyAdjustsScrollViewInsets = YES;
    if (@available(iOS 11, *)) {
        [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    }

  1. 关于appearance方法最好不要用在导航栏上,否则会影响一下系统的控制器的显示,比如选择图片的控制器,通讯录控制器等

  2. 关于iPhone X, 顶部刘海在有导航栏时会跟导航栏的背景颜色一样

相关文章

网友评论

      本文标题:iOS 导航栏小结

      本文链接:https://www.haomeiwen.com/subject/hhdcqqtx.html