UINavgationbar 渐变透明效果

问题的产生

产品个需求,修改UINavgationbar 的透明度,以前图省事就把bar给隐藏了,然后自定义了个假的头(UIView),开始感觉还不错,在view上放什么都方便。可以当iPhoneX 发布的时候彻底崩溃了,顶上是自定义的,不能很好适配iPhoneX 的界面,然后原生的navgationbar 能很好的适应,所以就开始着手对navgationbar 的扩展,期望在原生的基础上达到滑动渐变透明的效果

着手解决

网上找了很多解决方法,最简单的一个方法是在navgationbar上添加一层view,也不会影响bar上的按钮颜色和透明度。

代码

//适配 iPhoneX
let kStatusBarHeight = UIApplication.shared.statusBarFrame.height
let kNavBarHeight: CGFloat = 44.0
let kTopHeight = kStatusBarHeight + kNavBarHeight
let kTabBarHeight = kStatusBarHeight > 20 ? 83:49
//自定义view
var zh_alphaView: UIView? {
        set {
            objc_setAssociatedObject(self, &alphaViewKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
        get {
            return objc_getAssociatedObject(self, &alphaViewKey) as? UIView
        }
    }
func zh_setBackgroundColor(color: UIColor, alpha: CGFloat) {
        if zh_alphaView == nil {
            zh_alphaView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.width, height: kTopHeight))
            navigationBar.setBackgroundImage(UIImage(), for: .default)
            navigationBar.shadowImage = UIImage()
//            navigationBar.insertSubview(zh_alphaView!, at: 0)     //ios 11下遮挡 标题
            navigationBar.subviews[0].insertSubview(zh_alphaView!, at: 0)
        }
        zh_alphaView?.backgroundColor = color.withAlphaComponent(alpha)
    }

源代码地址

github地址 如果您觉得有帮助,不妨给个star鼓励一下, 欢迎关注

参考链接

当然有参考链接啦

T . T 最近发现了更好的方法

// 给导航栏设置一个背景图
self.navigationController?.navigationBar.setBackgroundImage(image, for: .default)
// 导航栏的透明度(设置一个全局的透明度对象)
fileprivate lazy var _alpha = 0.0
// 获取导航栏背景 初始透明度为0
_barImageView = self.navigationController?.navigationBar.subviews.first
_barImageView.alpha = CGFloat(_alpha)
func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let offsetY = scrollView.contentOffset.y
        if offsetY <= 0 {
            _alpha = offsetY / -kTopHeight
            _barImageView.alpha = CGFloat(_alpha)
        } else {
            _barImageView.alpha = CGFloat(0.0)
        }
}

链接:iOS - 导航栏渐变

你可能感兴趣的:(UINavgationbar 渐变透明效果)