更新說明:
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