现今APP开发中,定制导航栏的样式应该算是必须的需求了。个人认为系统的导航栏效果不如将导航栏隐藏,重新一个view当做导航栏的效果好看。当然,这种事情见仁见智。在使用系统导航栏时遇到过的问题,诸如返回按钮不美观,侧滑返回失效,导航栏的隐藏显示,以及最严重的一个,手势返回到一半又停留在当前页面,往后push的每一个页面title都变成了之前的那个页面。郑重推荐一个开源框架--FDFullscreenPopGesture,如丝般顺滑,谁用谁知道。
框架在此不多赘述,解决方案如下。主要思路是将一个由UINavigationController包含的UIViewController(需要UITabBarController同理)设置为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];
}
-
有时候我们设置了图片看不到想要的效果,这是因为系统会对图片进行渲染,这时我们就要设置图片显示的模式为原图,如图
再贴一张效果图
接下来说一下上面介绍的框架-- FDFullscreenPopGesture的一些用法,它除了添加了全屏手势返回外,还有以下特别好用的属性。
@property (nonatomic, assign) BOOL fd_interactivePopDisabled;
@property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden;
前者可以在任意界面上控制侧滑手势
//设为YES取消返回手势
self.fd_interactivePopDisabled = YES;
后者则可以完美控制导航栏的隐藏与否
self.fd_prefersNavigationBarHidden = YES;
这样一来就不用在视图将要出现或消失时写一堆繁琐的代码了