iOS开发进阶 - 隐藏UINavigationBar的小技巧
2016-07-28 23:54
519 查看
如果移动端访问不佳,可以访问我的个人博客
在开发过程中,为让屏幕显示更多的内容,有时候设计师会让我们隐藏UINavigationBar,通过浏览大神们写的文章和工作上用到的,总结了一下隐藏UINavigationBar的三种效果,用swift写了一份,供学习使用~~~
demo地址
思路是写一个扩展,先给UINavigationBar的backGroudImage设置为空,然后在UINavigationBar上通过runtime插入一个UIView,然后监听滚动事件,调整这个UIView的透明度来达到这个效果,下面贴代码:
主要思路也是通过扩展实现,通过改变UINavigationBar的transform来达到位移的效果,然后通过KVC来获取到UINavigationBar上的subViews来达到它的子view的透明渐变效果,下面上代码:
主要思路也是通过扩展实现,通过改变UINavigationBar的transform来达到位移的效果,然后通过KVC来获取window的状态栏一起进行偏移,下面上代码:
demo地址
参考
以上就是我总结的关于三种隐藏UINavigationBar的三种方式,欢迎大家一起交流,如果有更好的可以一起学习
在开发过程中,为让屏幕显示更多的内容,有时候设计师会让我们隐藏UINavigationBar,通过浏览大神们写的文章和工作上用到的,总结了一下隐藏UINavigationBar的三种效果,用swift写了一份,供学习使用~~~
demo地址
第一种让UINavigationBar透明渐变消失
思路是写一个扩展,先给UINavigationBar的backGroudImage设置为空,然后在UINavigationBar上通过runtime插入一个UIView,然后监听滚动事件,调整这个UIView的透明度来达到这个效果,下面贴代码:
/** 给UINavigationBar添加背景色,用runtime插入一个backView - parameter color: backView的背景颜色 - returns: 返回UINavigationBar本身 */ func setWclBackGroundColor(color:UIColor) -> UINavigationBar { let wclBackGroundColorView = objc_getAssociatedObject(self, &wclBackView) as? UIView if wclBackGroundColorView == nil { setBackgroundImage(UIImage.init(), forBarMetrics: .Default) shadowImage = UIImage.init() let backView = UIView.init(frame: CGRectMake(0, -20, bounds.width, bounds.height+20)) backView.backgroundColor = color backView.userInteractionEnabled = false backView.autoresizingMask = [.FlexibleHeight, .FlexibleWidth] insertSubview(backView, atIndex: 0) objc_setAssociatedObject(self, &wclBackView, backView, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }else { wclBackGroundColorView!.backgroundColor = color } return self } /** 设置backView的透明度 - parameter alpha: backView的透明度 - returns: 返回UINavigationBar本身 */ func setWclBackViewAlpha(alpha:CGFloat) -> UINavigationBar { let wclBackGroundColorView = objc_getAssociatedObject(self, &wclBackView) as? UIView wclBackGroundColorView?.alpha = alpha return self }
第二种让UINavigationBar向上位移,并且UINavigationBar上的view透明渐变
主要思路也是通过扩展实现,通过改变UINavigationBar的transform来达到位移的效果,然后通过KVC来获取到UINavigationBar上的subViews来达到它的子view的透明渐变效果,下面上代码:
/** 向上隐藏NavigationBar - parameter progress: 隐藏的进度,默认是0,范围0~1 - returns: 返回UINavigationBar本身 */ func setWclNavBarHide(progress:CGFloat) -> UINavigationBar { print(progress) if progress > 0 { transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, -bounds.height*progress) }else { transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, 0) } if let leftViews = valueForKey("_leftViews") as? [UIView] { for leftView in leftViews { leftView.alpha = 1 - progress } } if let rightViews = valueForKey("_rightViews") as? [UIView] { for rightView in rightViews { rightView.alpha = 1 - progress } } if let titleView = valueForKey("_titleView") as? UIView { titleView.alpha = 1 - progress } return self }
第三种UINavigationBar和window的状态栏一起向上位移
主要思路也是通过扩展实现,通过改变UINavigationBar的transform来达到位移的效果,然后通过KVC来获取window的状态栏一起进行偏移,下面上代码:
/** 向上隐藏NavigationBar和StateView - parameter progress: 隐藏的进度,默认是0,范围0~1 - returns: 返回UINavigationBar本身 */ func setWclNavBarAndStateHide(progress:CGFloat) -> UINavigationBar { if let stateView = UIApplication.sharedApplication().valueForKey("statusBarWindow") as? UIView { if progress > 0 { transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, -(bounds.height+20)*progress) stateView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, -(bounds.height+20)*progress) }else { transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, 0) stateView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, 0) } } return self }
demo地址
参考
以上就是我总结的关于三种隐藏UINavigationBar的三种方式,欢迎大家一起交流,如果有更好的可以一起学习
相关文章推荐
- iOS之UIViewController执行返回操作并传递参数值的两种方式
- apue 源码编译问题
- iOS中UIButton详解
- 【连载】研究EasyUI系统——EasyUI简介
- 【Leetcode】之Unique Binary Search Trees
- LeetCode:Unique Binary Search Trees系列
- Mybatis select返回值为map时,选取表字段的两列作为key,value
- position属性的四个value
- 63. Unique Paths II
- UESTC 1170 红与蓝 计算几何、贪心、红蓝点对
- -[UIWindow viewForFirstBaselineLayout]: unrecognized selector sent to instance
- 【poj1019】 Number Sequence
- BZOJ 1803 Query on a tree III
- Java多线程--synchronized ,Condition,BlockingQueue应用实例
- [已解决]Could not allocate CursorWindow '' of size of size 2097152 due to error -12.
- iOS基础:UITableView简单使用
- QtQuick学习整理
- Android 播放视频UI的功耗优化 && 动态增加view小结
- 最新cocoapods安装
- UITableView方法使用