1. 前言
UITabBar,UINavigationBar非常的好用,但是毕竟是系统自带的,不受自己完全掌握,对于布局和隐藏会有一些问题,现在就来谈谈我的想法和一些问题。
2. view,UITabBar,UINavigationBar之间的关系
1. 如果是在storyboard下,通过segue的连线实现跳转,那么navigationBar会自动出现在屏幕里,很好做自动布局。
2. 如果通过代码或者别的不连线的方式实现跳转,那么需要注意的就是做自动布局时,如果设定和view的上下边界距离,等到运行时,实际上是和navigationBar和tabBar的上下边界距离。
3. 整个view的高度是固定的,只和手机的型号有关。如果没有navigationBar和tabBar, 那么中间的内容高度就会相应地增加。
3. UITabBar的隐藏问题
我想很多人都遇到过UITabBar的隐藏问题,最容易的方法一般是下面两种
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@""]; [vc setHidesBottomBarWhenPushed:YES]; //隐藏tabbar [self.navigationController pushViewController:vc animated:YES];
self.hidesBottomBarWhenPushed = YES; UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@""]; [self.navigationController pushViewController:vc animated:YES]; self.hidesBottomBarWhenPushed = NO;
这两种方法我都试了,确实能够隐藏tabBar,大部分情况下都没问题。
不过我遇到了一个比较奇葩的隐藏问题,就是tabBar会有留白。追本溯源,这就和前面view和tabBar的关系有关了。
我的问题:
tabBar高度49px,页面跳转到一个聊天页面,最下面的聊天框也是49px。
聊天框上面就是UITableView实现的聊天界面,设定UITableView到View的bottom间距为49px。
但是实际运行时,系统会认为是UITableView到TabBar的间距为49px,这就会出现下面的问题:
即使设定了UITabBar隐藏,但是系统运行时还是会出现留白,不过一闪而过就没了。如果设定到view的bottom间距为0px,留白没有了,但是聊天框占据了49px,聊天的最后一行拉不到,很奇葩的问题。
原因:我的感觉就是即使UITabBar隐藏了,系统到运行的时候,聊天页面都viewDidAppear时,还是认为49px的间距是到已经隐藏的UITabBar上的。
4. 解决方法
最后的解决方法是,设置间距为0px,等到viewDidAppear时设置间距为49px
-(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:YES]; self.bottomSpace.constant = 49; //解决了留白问题 }