在NavigationBar和Tabbar中,会考虑现实内容的顶部是从屏幕左上角开始,还是从navigationbar之下开始的问题。

未标题-1.png

EdgesForExtendedLayout

UIViewControllersetEdgesForExtendedLayout这个函数,默认值是UIRectEdgeAll

  • UIRectEdgeAll,这时候布局就是从navigationbar顶部开始,屏幕底部结束。
  • UIRectEdgeBottom那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕底部;
  • UIRectEdgeNone那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕tabBar上部;
  • UIRectEdgeTop 那么就会self.view.frame是从navigationBar上面计算面开始计算一直到屏幕tabBar上部;

所以很多常用布局采用了UIRectEdgeNone,就是从navigationBar下面布局到tabBar上部。

translucent

默认的tabbar和navigationbar是半透明的,所以也可以通过设置navigationBar和tabbar的不透明

self.navigationController.navigationBar.translucent = NO;
self.tabBarController.tabBar.translucent = NO;

而这两个设置的话,其实是和将UIViewControllerEdgesForExtendedLayout设置为UIRectEdgeNone一样的效果,页面布局都是从navigationBar下面布局到tabBar上部。

测试代码:

//    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.navigationController.navigationBar.translucent = NO;
    self.tabBarController.tabBar.translucent = NO;
    
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor greenColor]];
    [self.view addSubview:view];
    [view mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.equalTo(self.view);
        make.width.height.mas_equalTo(200);
    }];

    UIView *view1 = [[UIView alloc] init];
    [view1 setBackgroundColor:[UIColor greenColor]];
    [self.view addSubview:view1];
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.mas_equalTo(200);
        make.left.bottom.equalTo(self.view);
    }];

UIRectEdgeAll碰上UIScrollView

如果是想让页面充满屏幕,设置的为UIRectEdgeAll,这时候如果页面的布局是UIScrollView布局的,UIScrollView默认一个属性contentInsetAdjustmentBehaviorUIScrollViewContentInsetAdjustmentAutomatic,这个就是scrollview里面的内容会自动从navigationBar下面布局到tabBar上部,如果设置为UIScrollViewContentInsetAdjustmentNever就是从屏幕左上角开始了。

当然这个是UIRectEdgeAll碰上UIScrollView,如果是像上面说的已经设置了UIRectEdgeNone或者不透明,那么scrollview的布局都是从navigationBar下面布局到tabBar上部,设不设置contentInsetAdjustmentBehavior都是一样的。

测试代码:

UIScrollView *scrollView = [[UIScrollView alloc] init];
    scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    [scrollView setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:scrollView];
    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
    }];

    UIView *contentView = [[UIView alloc] init];
    [scrollView addSubview:contentView];
    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(scrollView);
        make.width.equalTo(scrollView);
    }];

    UIView *bottomView = [[UIView alloc] init];
    [bottomView setBackgroundColor:[UIColor greenColor]];
    [contentView addSubview:bottomView];
    [bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.mas_equalTo(200);
        make.left.equalTo(contentView);
        make.top.equalTo(contentView).offset(2000);
    }];
    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.equalTo(bottomView);
    }];

☟☟可点击下方广告支持一下☟☟

最后修改:2019 年 03 月 23 日
请我喝杯可乐,请随意打赏: ☞已打赏列表