swift UINavigationController 使用总结

一. 导航栏 统一返回按钮样式

1.创建一个基类BaseViewController 继承自UIViewController, 其余所有的ChildViewController都继承自BaseViewController 在BaseViewController设置返回按钮的样式,代码如下:

swift 版本:5.0

    //去掉按钮右边的文字
    navigationItem.backBarButtonItem = UIBarButtonItem.init(title: "", image:nil, primaryAction: nil, menu: nil)
    //设置按钮的颜色
    navigationItem.backBarButtonItem?.tintColor = UIColor(red: 35 / 255, green: 35 / 255, blue: 35 / 255, alpha: 1.0)

以上代码将就可以实现返回按钮样式统一

二. 自定义导航栏

1.设置导航栏透明
工作中经常会遇到首页无导航栏第二页有导航栏这样的情况,解决方法一般有两种: 1.隐藏导航栏 2.设置导航栏透明 由于隐藏导航栏会导致一些特殊的效果,所以接下来介绍一下如何设置导航栏透明 同上在BaseViewController中添加代码如下:

    //设置导航栏按钮为透明色图片
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    //设置导航栏阴影为透明色图片
    navigationController?.navigationBar.shadowImage = UIImage()

这样导航栏就透明了,效果如下:


Simulator Screen Shot - iPhone 11 - 2021-06-12 at 16.52.21.png

但是这样有个问题,所有的导航栏都会变透明,解决方案代码如下:

   func addNavBar(_ color:UIColor){
        
        //设置导航栏高度(此处可根据导航栏高度的不同来获取导航栏高度)
        let size = CGSize(width: view.bounds.width, height: 91)
        //纯色创建UIImage
        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        color.setFill()
        UIRectFill(CGRect(origin: .zero, size: size))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        //将UIImage添加到UIImageView
        let navImageView = UIImageView(image: image)
        view .addSubview(navImageView)
    }

在需要导航栏的页面,调用方法如下:

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.title = "第二页"
        //添加导航栏
        addNavBar(.red)
    }

效果如下图:


Simulator Screen Shot - iPhone 11 - 2021-06-12 at 17.02.31.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容