更新说明:
LWNavigationBar
已经更新,能够支持自定义UIView
做为item,而且也支持对此种item的add,update等操做,支持update空的item,即传入为nil,视为删除操做,另更新了标题栏布局适配问题 LWNavigationBar地址git
前言:项目中常常会遇到功能样式各类各样的导航栏,使用系统的也能达到需求,可是改动方面比较麻烦,特别是对于改动的时机把控问题较多,因此不少状况下都是隐藏系统的导航栏,自定义一个view区代替导航栏,导航栏的样式无非如下几种:github
文字,图片,与图文混合,这几种的组合bash
那么如何打造一款适用的导航栏呢?笔者在项目中的需求,导航栏风格迥异,还牵扯到一些控件的渐变和隐藏效果,下面就来具体讲解下封装的过程。ide
笔者想到的封装结构以下图所示:布局
整体设计如上图所示,LWNavigationBarItem
主要是对单体item
的相关设置,包括item样式,文字,图片和其相关样式的定制等 LWNavigationBar
是承载LWNavigationBarItem
的容器,对外提供增长,修改相关item
的接口,内部实现对item
的布局,下面我截取相关样式的图片:ui
还有其余组合这里就不一一列举,能够自行下载尝试spa
这层封装仅仅是对导航栏的定制进行设置的,若是想要和业务结合,生成不一样的导航栏,最好进行二次封装一次,我这里仅仅截取一个二次封装的方法,以下:设计
/*左右皆为图片,中间标题为文字,图片文字皆可为空
*/
+ (LWNavigationBar *)yg_createNavigationBarWithBarStyle:(YGNavigationBarStyle)style
target:(UIViewController *)target
leftImage:(UIImage * _Nullable)leftImage
titleText:(NSString * _Nullable )titleText
rightImage:(UIImage * _Nullable )rightImage
barHeight:(CGFloat)barHeight {
LWNavigationBarItem *leftItem = [[LWNavigationBarItem alloc] initWithItemType:LWNavigationBarItemOnlyImage];
[leftItem setItemImage:leftImage];
[leftItem setItemImageSize:CGSizeMake(20 * kXX, 20 * kXX)];
if ([target respondsToSelector:@selector(p_didClickLeftItemAction)]) {
[leftItem addTarget:target action:@selector(p_didClickLeftItemAction) forControlEvents:UIControlEventTouchUpInside];
}
LWNavigationBarItem *rightItem = [[LWNavigationBarItem alloc] initWithItemType:LWNavigationBarItemOnlyImage];
[rightItem setItemImage:rightImage];
[rightItem setItemImageSize:CGSizeMake(20 * kXX, 20 * kXX)];
if ([target respondsToSelector:@selector(p_didClickRightItemAction)]) {
[rightItem addTarget:target action:@selector(p_didClickRightItemAction) forControlEvents:UIControlEventTouchUpInside];
}
LWNavigationBarItem *titleItem = [[LWNavigationBarItem alloc] initWithItemType:LWNavigationBarItemOnlyText];
[titleItem setItemTitleColor:(style == YGNavigationBarStyleDefault ? [UIColor convertHexValueToColor:@"#2f2f2f"] : [UIColor whiteColor])];
[titleItem setItemTitle:titleText];
[titleItem setItemTitleFont:[UIFont fifteenOfSystem]];
LWNavigationBar *bar = [[LWNavigationBar alloc] init];
bar.backgroundColor = (style == YGNavigationBarStyleDefault ? [UIColor whiteColor] : [UIColor createNavigationColor]);
[bar setBarContentInset:15 * kXX];
[bar addItemToTitle:titleItem];
[bar addItemToRight:rightItem];
[bar addItemToLeft:leftItem];
[bar setItemLineViewColor:YGViews_RGBA(182, 182, 182, 1.0)];
bar.frame = CGRectMake(0, 0, kScreenW, barHeight);
[bar reloadItems];
[target.view addSubview:bar];
return bar;
}
复制代码
整体而言,这些已经能知足大多数需求,这里我附上Github连接,若是感兴趣,能够经过上述传送门下载看一下,此外,
LWNavigationBar
也支持pod,使用方式pod 'LWNavigationBar'
便可,若是以为知足你的需求,还望不吝一颗✨ ,谢谢3d