微信的导航条的中心栏是可以处理多种状态的显示,有导航栏的界面都可以使用,研究一下他的源码。
拆出来花了很大的功夫,原因是相互之间层级引用太复杂了 。
有个QMUICommonViewController
类 里面引用了#import "QMUINavigationController.h"
QMUINavigationTitleView
其中 QMUINavigationController
不仅管理QMUINavigationTitleView
的代理回调,点击相应实际同时给QMUICommonViewController
提供了pop 和push的时机,等其他的部分。
而QMUICommonViewController
中又有一个属性
@property(nonatomic,strong,readonly) QMUINavigationTitleView *titleView;
来替换了本身的titleView
QMUINavigationTitleView
要抽离出来,观察了一下,整个分为几部分
UINavigationBar (QMUI)
这里用了runtime的方法交换,来替换UINavigationBar的layoutSubviews方法, 来解决系统导航栏的bug
然后是布局部分
总体包括
1.UIActivityIndicatorView *loadingView
旋转菊花
2.UILabel *titleLabel 主标题
3.UILabel *subtitleLabel 副标题
4.UIView *accessoryView 展开收起的三角形
然后做了两套布局
主标题在副标题在下
主标题和副标题在一起的布局
剩余的就是参数设置了,以及去掉一些其他界面的引用
,然后写个控制器融进去试试看,大功告成。
最后说下为什么使用这种loading样式。因为用户可以接受这样的界面
导航栏很醒目,网络状态不好,或者在连接中,用户就会耐心等待了。使用hub的话让用户感觉等待的很着急。
又添加了页面的loading
比如说连接到了一台设备,
但是设备底下的数据还没有请求到。
这时候导航栏就不应该继续转了,数据应该变为 收取中….
要给用户感知到已经连接到设备,
在请求数据的过程。
因此在界面的loading也是很有必要的
此时的loading也一样要小一点,让用户感觉
可以再等等的感觉。