美文网首页
UINavgationbar 渐变透明效果

UINavgationbar 渐变透明效果

作者: AlwaysLight | 来源:发表于2017-09-28 10:44 被阅读24次

问题的产生

产品个需求,修改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 渐变透明效果

    问题的产生 产品个需求,修改UINavgationbar 的透明度,以前图省事就把bar给隐藏了,然后自定义了个假...

  • RN-Animated

    渐变动画 渐变动画是改变透明度实现的动画效果,从透明到不透明的效果 点击按钮,开始动画 旋转动画 点击按钮开始动画...

  • 封装一个UINavgationBar的渐变效果

    效果图: 在有UIScrollview的页面中,做一个NavBar 的渐变过渡,最好还是抽取出来。 使用方法,需要...

  • Android RecycleView 只增加顶部透明渐变效果f

    问题 UI要求给列表指定区域添加顶部透明渐变效果,效果如下图: 滑动的时候,顶部固定20dp的位置要透明渐变。 增...

  • navigationBar 的渐变透明效果

    类似这样的一个界面,要实现视图向上滑动的时候导航栏渐变为透明并且收起来的效果,其实很简单,首先这个界面是由UICo...

  • 图像融合效果-透明渐变

    牙叔教程 简单易懂 效果展示 斯嘉丽约翰逊 美国国旗 图片融合 环境 Android版本: 11 Autojs版本...

  • 颜色渐变

    颜色透明渐变效果 参考链接:UIView 的渐变色呈现CAGradientLayer的一些属性解析

  • APP启动页背景颜色变化

    在APP的启动页经常会有一些渐变效果。 如果是从半透明渐变为不透明,用View动画AlphaAnimation就能...

  • 设置系统导航栏半透明效果

    一、设置系统导航栏颜色 二、导航栏透明度渐变效果

  • android动画及阴影效果

    1.动画定义位置:xml/anima包下常用属性:alpha 渐变透明度动画效果scale 渐变尺寸伸缩动...

网友评论

      本文标题:UINavgationbar 渐变透明效果

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