UITabBar,UINavigationBar的布局和隐藏问题

---恢复内容开始---

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;   //解决了留白问题
}
原文地址:https://www.cnblogs.com/stevenfukua/p/4593276.html