在NavigationBar和Tabbar中,会考虑现实内容的顶部是从屏幕左上角开始,还是从navigationbar之下开始的问题。
EdgesForExtendedLayout
UIViewController
中setEdgesForExtendedLayout
这个函数,默认值是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;
而这两个设置的话,其实是和将UIViewController
的EdgesForExtendedLayout
设置为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默认一个属性contentInsetAdjustmentBehavior
是UIScrollViewContentInsetAdjustmentAutomatic
,这个就是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);
}];
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/936.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!