zoukankan      html  css  js  c++  java
  • 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;   //解决了留白问题
    }
  • 相关阅读:
    学无止境,我爱python
    Flask目录
    Django目录
    前端目录
    python目录
    MySQL目录
    Oracle与Sql server的区别
    Git
    restful规范
    Django 解决跨域问题(写入到中间件中)
  • 原文地址:https://www.cnblogs.com/stevenfukua/p/4593276.html
Copyright © 2011-2022 走看看