iOS浅谈导航控制器和标签控制器遇到的坑
2016-11-14 本文已影响0人
戴上耳机__世界与我无关
UINavigationController
-
navigationBar有一个 translucent属性.默认是YES.如果标签栏有一个自定义背景图片,如果系统判定图片像素值α<1.0,系统将应用透明度低于1.0的形象. 也就是translucent = YES;
当 translucent = YES时,图层是这样的 view的fream从屏幕上方开始,能透过导航条看到后面view颜色
Snip20161113_21.png
-
当 translucent =NO时,图层是这样的 view的fream从导航条下方,不能透过导航条看到后面view颜色
Snip20161113_20.png
导航栏样式
- 如果有导航控制器时,导航栏的样式的权限是默认交给导航控制器做全局处理
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
- 如果实现了下面的方法,导航控制器就把权限交给处于栈顶的控制器来设置导航条的样式,必须实现此方法
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController; // 返回当前的栈顶控制器
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
隐藏导航栏
- 隐藏导航栏导航控制器不能操作,只能去没个子控制器去设置,官方不建议隐藏
- (BOOL)prefersStatusBarHidden {
return YES;
}
隐藏tabBar
- 控制器跳转的时候,我们需要隐藏导航控制器的非根控制器的tabBar
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
//tabBar会在创建之前就被隐藏,所以需要判断.
if (self.childViewControllers.count > 0) {
viewController.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:animated];
}
去掉导航条下面的阴影线
- 把导航条下面的隐影线去掉,图片参数不能传"nil"把导航条彻底透明去掉阴影线
[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
// 清空阴影图片
[self.navigationBar setShadowImage:[UIImage new]];
常用的属性
- 如果要设置内容全找item
- 如果要改的是颜色及文字属性相关的找bar
// 设置导航条内容主题色
self.navigationBar.tintColor = [UIColor whiteColor];
// 设置导航条及状态栏的背景色
self.navigationBar.barTintColor = [UIColor blueColor];
//常用的设置导航条标题文字颜色及字体大小的作法
self.navigationBar.titleTextAttributes = @{NSFontAttributeName : [UIFont systemFontOfSize:17], NSForegroundColorAttributeName : [UIColor whiteColor]};
UITabBarController
- UITabBar也有translucent属性 道理和上面一样 只是是否显示标签栏后面的view
- 不渲染taBbar上的图片
vc.tabBarItem.selectedImage = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
或者找到图片这样改
