NavigationBar 总结

 NavigationBar BarButtonItem样式

方法1:

 letbtnItem1 =UIBarButtonItem(image:UIImage(named:"zhiyuan"), style: .plain,            

 target:self, action:#selector(didTapRight))

方法2:        

letbutton =UIButton(type: .custom)        button.setImage(UIImage(named:"nongmin"), for: .normal)

button.sizeToFit()       

button.addTarget(self, action:#selector(didTapRight), for: .touchUpInside)        letbtnItem2 =UIBarButtonItem(customView: button)


这两种方式创建自定义图片的UIBarButtonItem所得的结果是不一样的,如下图:图片本身有颜色,方法1生成的是没有颜色的,方法2则可以还原图片原有颜色。


NavigationBar 总结_第1张图片

如果一定要使用方法一,又想他的tintrColor颜色是原有颜色,则可以这样修改:

let btnItem1 = UIBarButtonItem(image: nil, style: .plain, target: self, action: #selector(didTapRight))  

btnItem1.image = UIImage(named: "zhiyuan")?.withRenderingMode(.alwaysOriginal)

这样也是可以显示原图的,方法一之所以不显示原图因为他的图片渲染模式是.alwaysTemplate, 这个属性的作用是:Always draw the image as a template image, ignoring its color information  。


NavigationBar 总结_第2张图片

导航栏隐藏

1.全部隐藏

override func viewDidAppear(_ animated: Bool) {         super.viewDidAppear(animated)   

navigationController?.navigationBar.alpha = 0 

//整个导航栏隐藏,包括items,但导航栏位置还在,tableView会在导航栏下面开始布局(0, 64),即偏移了64

如果这个时候想让tableView从(0,0)开始布局,可以加上这句

tableView.contentInsetAdjustmentBehavior = .never 

但会发现下面又看不完了,可以用这个:

tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 88, right: 0)

}


或者:

navigationController?.setNavigationBarHidden(true, animated: false)

//这个是系统的方法,隐藏后tableView会从状态栏下面开始布局(0, statusBar.frame.height)

当然,也可以使用.never这句来使其到达顶部。


只隐藏导航栏,不隐藏items

//导航栏定制-透明效果(背景图片和阴影图片设为空) navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage()

//相当于将底图置空了


NavigationBar 总结_第3张图片
tableView向上滑有穿透的感觉

你可能感兴趣的:(NavigationBar 总结)