方便好用的iOS 導航欄封裝.runtime屬性控制
介紹一個不錯的導航欄控制工具,可以大大的簡化程式碼,並保留系統特性,不用自定義導航欄,不用繼承base。
UIViewController+YINNav
效果

QQ20181030-172328-HD.gif
@interface UIViewController (YINNav) /** 控制螢幕方向 在appdelegate 實現 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ return[[[NSUserDefaults standardUserDefaults] objectForKey:@"orientation"] integerValue]; } */ @property(nonatomic,assign)UIInterfaceOrientationMasky_screenOrientation; /** 上級控制器 可設定 手勢返回和pop的時候生效 */ @property (nonatomic) UIViewController *y_popController; /** 是否啟用大標題模式 僅支援iOS11 預設為NO 。 */ @property(nonatomic,assign)BOOLy_largeTitleMode; /** 隱藏nav橫線 */ @property(nonatomic,assign)BOOLy_navLineHidden; /** nav橫線 */ @property(nonatomic,strong)UIView*y_navLine; /** 字型顏色 預設為[UIColor blackColor] */ @property (nonatomic , strong) UIColor *y_navBarTextColor; /** 背景顏色 預設為[UIColor whiteColor] */ @property (nonatomic , strong) UIColor *y_navBarBgColor; /** 背景圖 如果設定了背景圖背景色無效 */ @property (nonatomic , strong) UIImage *y_navBarBgImg; /** 設定對應的y_navBarAlpha透明度 */ @property (nonatomic , assign) CGFloat y_navBarAlpha; /** navagationbar是否隱藏 預設為不隱藏navagationbar */ @property (nonatomic , assign) BOOL y_navBarHidden; @end
看下與系統方法的對比
在我們使用系統api開發時。常規的,如果只有其中幾個頁面導航欄樣式不同,區域性設定必須遵循一個原則:"進入頁面時修改,離開頁面時還原”。
比如我們進入一個頁面,需要設定當前導航欄的背景色為灰色,使用如下方法:
//進入頁面時設定顏色:灰色 - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigationController.navigationBar setBarTintColor:[UIColor grayColor]]; } //離開頁面時還原為全域性設定:橙色 - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.navigationController.navigationBar setBarTintColor:[UIColor orangeColor]]; }
使用UIViewController+YINNav的程式碼:
- (void)viewDidLoad { [super viewDidLoad]; self.y_navBarBgColor = [UIColor orangeColor]; }
當頁面返回時自動設定導航欄為即將顯示的controller配置。
透明度漸變效果
- (void)viewDidLoad { [super viewDidLoad]; self.y_navBarAlpha = 0.999;//如果有漸變 不能設為1 否則會頁面會從導航欄下面開始佈局。 self.y_navBarBgColor = [UIColor orangeColor]; }
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ self.y_navBarAlpha = 0.999-(scrollView.contentOffset.y/400.f); }
設定導航欄背景顏色
- (void)viewDidLoad { [super viewDidLoad]; self.y_navBarBgColor = [UIColor orangeColor]; }
設定導航欄背景圖
- (void)viewDidLoad { [super viewDidLoad]; //權重高於背景色 self.y_navBarBgImg = [UIImage imageNamed:@"app2"]; }
設定導航欄大標題
- (void)viewDidLoad { [super viewDidLoad]; self.y_largeTitleMode = YES; }
設定導航欄隱藏
- (void)viewDidLoad { [super viewDidLoad]; self.y_navBarHidden = YES; }
設定導航欄細線
- (void)viewDidLoad { [super viewDidLoad]; self. y_navLineHidden = YES; }
程式碼控制返回頁面
- (void)viewDidLoad { [super viewDidLoad]; //傳一個controller物件 可以是navgationcontroller 棧內的物件 self.y_popController = [[YINNavAlphaViewController alloc] init]; }
設定頁面方向
- (void)viewDidLoad { [super viewDidLoad]; self. y_screenOrientation = UIInterfaceOrientationMaskLandscapeRight; }
程式碼地址
ofollow,noindex">https://github.com/wangyin1/YINNavgationDemo