現(xiàn)今APP開發(fā)中,定制導(dǎo)航欄的樣式應(yīng)該算是必須的需求了。個人認為系統(tǒng)的導(dǎo)航欄效果不如將導(dǎo)航欄隱藏,重新一個view當做導(dǎo)航欄的效果好看。當然,這種事情見仁見智。在使用系統(tǒng)導(dǎo)航欄時遇到過的問題,諸如返回按鈕不美觀踏幻,側(cè)滑返回失效隔缀,導(dǎo)航欄的隱藏顯示牵触,以及最嚴重的一個,手勢返回到一半又停留在當前頁面损痰,往后push的每一個頁面title都變成了之前的那個頁面尝丐。鄭重推薦一個開源框架--FDFullscreenPopGesture失息,如絲般順滑绎秒,誰用誰知道阅懦。
框架在此不多贅述,解決方案如下。主要思路是將一個由UINavigationController包含的UIViewController(需要UITabBarController同理)設(shè)置為window的rootViewController作為首頁扳炬,首頁可以自由定制劝术。接下來的每一個控制器則使用繼承自UIViewController的基控制器绳泉,如 @interface BasicViewController : UIViewController四苇,這里只給出重寫返回按鈕的代碼罗售。
- (void)viewDidLoad {
[super viewDidLoad];
[self setUpNav];
}
- (void)setUpNav
{
UIButton *leftBarBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[leftBarBtn setImage:[UIImage imageNamed:@"返回按鈕 copy 2"] forState:UIControlStateNormal];
leftBarBtn.frame = CGRectMake(0, 0, 44, 44);
leftBarBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
leftBarBtn.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftBarBtn];
[leftBarBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
}
- (void)backAction
{
[self.navigationController popViewControllerAnimated:YES];
}
-
有時候我們設(shè)置了圖片看不到想要的效果,這是因為系統(tǒng)會對圖片進行渲染,這時我們就要設(shè)置圖片顯示的模式為原圖颓屑,如圖
51CE00E2-4694-4831-8879-5A0E8AAB7A80.jpeg
再貼一張效果圖
接下來說一下上面介紹的框架-- FDFullscreenPopGesture的一些用法诊县,它除了添加了全屏手勢返回外抗悍,還有以下特別好用的屬性。
@property (nonatomic, assign) BOOL fd_interactivePopDisabled;
@property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden;
前者可以在任意界面上控制側(cè)滑手勢
//設(shè)為YES取消返回手勢
self.fd_interactivePopDisabled = YES;
后者則可以完美控制導(dǎo)航欄的隱藏與否
self.fd_prefersNavigationBarHidden = YES;
這樣一來就不用在視圖將要出現(xiàn)或消失時寫一堆繁瑣的代碼了