UINavigationController 、UINavigationBar 、UINavigationItem 超清晰直观详解(扩展)
ios开发中如何隐藏各种bar
状态条Status Bar
[UIApplication sharedApplication].statusBarHidden = YES;
或者
// iOS3.2+支持
[application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
statusBarHidden属性支持在iOS2.0+,setStatusBarHidden:animated:方法在iOS3.2中开始取消了,而采用了setStatusBarHidden:withAnimation:方法。
上述方法只能实现在程序跳过loading(即启动画面)的时候才能隐藏状态栏。如果想要在启动画面开始即隐藏状态栏,则要修改app的info.plist文件,新增UIStatusBarHidden键(Status bar is initially hidden),其值是YES。
同理:对于状态栏的颜色改变,也要分别从两处着手,代码[[UIApplicationsharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];仅仅改变了启动画面之后的视图上的状态栏,要让App应用在启动画面之时就改变默认颜色,则要修改info.plist文件,新增UIStatusBarStyle键(Status bar style),其值有Opaque black style、Transparent black style和默认的Gray style。
导航条Navigation Bar
[self.navigationController setNavigationBarHidden:YES];
选项卡TabBar
方法一:
[self.tabBarController.tabBar setHidden:YES];
此方法的问题:虽然tabBar栏被隐藏了,但该区域成一片空白区,无法被其他视图使用。
方法二:
对于navigationController+tabBarController的结构,可以在push下一级的childController之前将childController的hidesBottomBarWhenPushed属性设为YES。比如,可以在childController的初始化方法中做这件事,代码如下:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization.
self.hidesBottomBarWhenPushed = YES;
}
return self;
}

方法三:

- (void)makeTabBarHidden:(BOOL)hide
{
if ( [self.tabBarController.view.subviews count] < 2 )
{
return;
}
UIView *contentView; if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] )
{
contentView = [self.tabBarController.view.subviews objectAtIndex:1];
}
else
{
contentView = [self.tabBarController.view.subviews objectAtIndex:0];
}
// [UIView beginAnimations:@"TabbarHide" context:nil];
if ( hide )
{
contentView.frame = self.tabBarController.view.bounds;
}
else
{
contentView.frame = CGRectMake(self.tabBarController.view.bounds.origin.x,
self.tabBarController.view.bounds.origin.y,
self.tabBarController.view.bounds.size.width,
self.tabBarController.view.bounds.size.height - self.tabBarController.tabBar.frame.size.height);
} self.tabBarController.tabBar.hidden = hide;
// [UIView commitAnimations];
}

时机

- (void)viewWillAppear:(BOOL)animated
{
[self setFullScreen:YES];
}
- (void)viewWillDisappear:(BOOL)animated
{
[self setFullScreen:NO];
}
- (void)setFullScreen:(BOOL)fullScreen
{
// 状态条
[UIApplication sharedApplication].statusBarHidden = fullScreen;
// 导航条
[self.navigationController setNavigationBarHidden:fullScreen];
// tabBar的隐藏通过在初始化方法中设置hidesBottomBarWhenPushed属性来实现
}
设置UINavigationBar的透明度
方法1:
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
方法2:
[self.navigationController.navigationBar setAlpha:0.5];不过看到的是window的背景
NavigationBar在64位ios中的特性
//将navigationBar的背景色设置为黄色 iphone5s 64位操作系统,使用下面的方法,将导致navigationBar的大小扩大一倍,self.view的位置整体下移一个navigationbar的距离
//[self.navigationController.navigationBar setBackgroundImage:[ImageUtilities createImageWithColor:[ColorUtils colorWithHexString:orange_color]] forBarMetrics:UIBarMetricsDefault];
viewDidLoad和viewWillAppear的区别
NavigationController 在从BController pop回AController时,如果 AController的View还在,程序是不会再执行AController的viewDidLoad方法的。但程序回执行AController的viewAppear方法,这就是为什么NavigationBar的很多定制化属性,要写在viewWillAppear中。而不是viewDidLoad中。

UINavigationController 、UINavigationBar 、UINavigationItem 超清晰直观详解(扩展)的更多相关文章
- UINavigationController 、UINavigationBar 、UINavigationItem 超清晰直观详解
UINavigationController 部分 1. UINavigationController 是一个容器类.里面盛放的是UIViewController. 容器的意思是,如果你不放入UIVi ...
- Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作
Android项目刮刮奖详解(四) 前言 我们已经成功实现了刮刮奖的功能了,本期是扩展篇,我们把这个View直接定义成开源控件,发布到JitPack上,以后有需要也可以直接使用,关于自定义控件的知识, ...
- PHP超全局变量$_ENV详解,及$_ENV为空的可能原因
PHP中的$_ENV存储了一些系统的环境变量,因为牵扯到实际的操作系统,所以不可能给出$_ENV的完整列表. $_ENV为空的可能原因: 你的php.ini的variables_order值为&qu ...
- 详解扩展欧几里得算法(扩展GCD)
浅谈扩展欧几里得(扩展GCD)算法 本篇随笔讲解信息学奥林匹克竞赛中数论部分的扩展欧几里得算法.为了更好的阅读本篇随笔,读者最好拥有不低于初中二年级(这是经过慎重考虑所评定的等级)的数学素养.并且已经 ...
- IP2——IP地址和子网划分学习笔记之《子网掩码详解》
2018-05-04 16:21:21 在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...
- IP地址和子网划分学习笔记之《IP地址详解》
2018-05-03 18:47:37 在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. ...
- Linux 正则表达式详解
正则表达式(REGULAR):为处理大量的字符串而定义的一套规则和方法,为了处理大量字符串而生 常见命令参数 基础正则表达式 . :有且只有任意一个字符(包括空格) * :重复前面任意0或者多个字符 ...
- UI第六节——UINavigationController 详解
1. UINavigationController 是一个容器类.里面盛放的是UIViewController. 容器的意思是,如果你不放入UIViewController,里面就是空的,什么也没有. ...
- iOS开发——控制器OC篇&UINavigationController&UITabBarController详解
UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationControl ...
随机推荐
- Linux下的snmpd.conf配置说明
SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理.在RHEL中,SNMP的配置文件地址是/ ...
- android之ExpandableListView 无法展开
1.Button 对,没错,就是这个button组件,不知道出现都少次过问题,很多都是它造成的! 最常见的问题:ExpandableListView无法展开,OnItemClickListener不响 ...
- CAS5.2x单点登录(二)cas服务器连接数据库
前面一节应该已经告诉大家如何搭建cas的服务器了,可是搭建好能用吗?我们现在的用户验证是在哪呢?哪个默认的用户名和密码有是在哪呢? 本节就讲一下如何使用cas服务器连接我们自己的用户数据库,毕竟没有哪 ...
- IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
结合 AspNetCore.Identity 主要就是下载 官方的IdentityServer4.AspNetIdentity 这个包 下面来看下源码 里面帮助我们处理了 IUserClaimsPr ...
- 用 scikit-learn 和 pandas 学习线性回归
用 scikit-learn 和 pandas 学习线性回归¶ from https://www.cnblogs.com/pinard/p/6016029.html 就算是简单的算法,也需要跑通整 ...
- Boost学习资源
http://blog.csdn.net/huang_xw/article/details/8758212
- catalan数的新理解
catalan数的新理解h[5]==h[4][0]+h[3][1]+h[2][2]+h[1][3]+h[0][4];对于这种递推式就是catalan数
- 点击图片查看大图(纯js)
$(function(){ $(".pimg").click(function(){ var _this = $(this);//将当前的pimg元素作为_this传入函数 img ...
- Xamarin iOS教程之申请付费开发者账号下载证书
Xamarin iOS教程之申请付费开发者账号下载证书 Xamarin iOS使用真机测试应用程序 在讲解iOS Simulator时,已经提到了虽然iOS Simulator可以模仿真实的设备,但是 ...
- BZOJ.3265.志愿者招募加强版(费用流SPFA)
题目链接 见上题. 每类志愿者可能是若干段,不满足那个...全幺模矩阵(全单位模矩阵)的条件,所以线性规划可能存在非整数解. 于是就可以用费用流水过去顺便拿个rank2 233. //20704kb ...