浅析extendedLayout, automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars
2016-06-17 11:01
751 查看
iOS 7以后在ViewController里面引进了一系列属性用于管理页面布局。
下面是Apple官方提供的文档解释,看过之后还是觉得太过于
4000
抽象,于是用代码来实验吧。
The extended edges to use for the layout.
A Boolean value that indicates whether the view controller should automatically adjust its scroll view insets.
A Boolean value indicating whether or not the extended layout includes opaque bars. edgesForExtendedLayout 新建单个页面的项目,然后加上UINavigationController
把背景设置成红色,界面效果如下:
所以可以看到在iOS7后,View的布局是默认全屏的,Navigation
Bar默认是半透明的,于是在Navigation Bar下面可以看到红色的背景。
将edgesForExtendedLayout设置成UIRectEdgeNone,表明View是不要扩展到整个屏幕的。页面效果如下:
UIRectEdge是个枚举类型,其他的值通过字面意思也是非常容易理解的。
这个属性用于如果页面是ScrollView或者UITableView,通常我们希望ScrollView或者UITableView内容显示是在UINavigation Bar下面。
通过设置edgesForExtendedLayout = UIRectEdgeNone或者self.navigationController.navigationBar.translucent = NO;可以让view的布局从UINavigation
Bar下面开始,不过一个副作用就是当页面滑动的时候,view是没有办法占据全屏的。
automaticallyAdjustsScrollViewInsets就可以很好的完成这个需求。
这时UITableView会被UINavigation Bar遮挡住。
这时可以看到UITableView的内容会从UINavigation Bar下面开始,并且这个页面的View还是占据整个屏幕的,所以这一个属性完全搞定!
extendedLayoutIncludesOpaqueBars
如果状态栏是不透明的,那么页面的布局默认是不会包含状态栏的,除非将这个属性设置成为YES。所以如果你的页面扩展到Navigation Bar (edgesForExtendedLayout=UIRectEdgeAll),要是这个属性设置成NO (default), 如果状态栏是不透明的话,页面是不会扩展到状态栏的。
下面是Apple官方提供的文档解释,看过之后还是觉得太过于
4000
抽象,于是用代码来实验吧。
edgesForExtendedLayout
The extended edges to use for the layout.
automaticallyAdjustsScrollViewInsets
A Boolean value that indicates whether the view controller should automatically adjust its scroll view insets.
extendedLayoutIncludesOpaqueBars
A Boolean value indicating whether or not the extended layout includes opaque bars. edgesForExtendedLayout 新建单个页面的项目,然后加上UINavigationController
把背景设置成红色,界面效果如下:
所以可以看到在iOS7后,View的布局是默认全屏的,Navigation
Bar默认是半透明的,于是在Navigation Bar下面可以看到红色的背景。
- (void)viewDidLoad { [super viewDidLoad]; self.edgesForExtendedLayout = UIRectEdgeNone;}
将edgesForExtendedLayout设置成UIRectEdgeNone,表明View是不要扩展到整个屏幕的。页面效果如下:
UIRectEdge是个枚举类型,其他的值通过字面意思也是非常容易理解的。
typedef enum : NSUInteger { UIRectEdgeNone = 0, UIRectEdgeTop = 1 << 0, UIRectEdgeLeft = 1 << 1, UIRectEdgeBottom = 1 << 2, UIRectEdgeRight = 1 << 3, UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight } UIRectEdge;
automaticallyAdjustsScrollViewInsets
这个属性用于如果页面是ScrollView或者UITableView,通常我们希望ScrollView或者UITableView内容显示是在UINavigation Bar下面。通过设置edgesForExtendedLayout = UIRectEdgeNone或者self.navigationController.navigationBar.translucent = NO;可以让view的布局从UINavigation
Bar下面开始,不过一个副作用就是当页面滑动的时候,view是没有办法占据全屏的。
automaticallyAdjustsScrollViewInsets就可以很好的完成这个需求。
self.automaticallyAdjustsScrollViewInsets = NO;
这时UITableView会被UINavigation Bar遮挡住。
self.automaticallyAdjustsScrollViewInsets = YES;
这时可以看到UITableView的内容会从UINavigation Bar下面开始,并且这个页面的View还是占据整个屏幕的,所以这一个属性完全搞定!
extendedLayoutIncludesOpaqueBars
如果状态栏是不透明的,那么页面的布局默认是不会包含状态栏的,除非将这个属性设置成为YES。所以如果你的页面扩展到Navigation Bar (edgesForExtendedLayout=UIRectEdgeAll),要是这个属性设置成NO (default), 如果状态栏是不透明的话,页面是不会扩展到状态栏的。
相关文章推荐
- extendedForExtendedLayout&automaticallyAdjustsScrollViewInsets
- automaticallyAdjustsScrollViewInsets和edgesForExtendedLayout和extendedLayoutIncludesOpaqueBars
- iOS小技巧-多个UIListView设置automaticallyAdjustsScrollViewInsets属性
- [IOS]edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets
- iOS 【automaticallyAdjustsScrollViewInsets 属性介绍】
- UINavigation嵌套UIpageViewController时视图会下移到UInavigationBar下面
- iOS7中UITableView问题以及UITableViewCell的层级关系
- ScrollView向下偏移64以及automaticallyAdjustsScrollViewInsets的使用
- iOS automaticallyAdjustsScrollViewInsets和translucent的详解
- automaticallyAdjustsScrollViewInsets属性对布局的影响
- [IOS]edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets
- navigationBar对视图布局的影响,今天终于弄清楚了
- 适配iOS11 - UITableview UICollectionView MJRefresh下拉刷新错乱
- ios7之后的适配属性讲解edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars等
- tableView头部留白
- vue入门
- iOS: 使用CGContextRef,CGPath和UIBezierPath来绘画
- 使用Processing+Arduino写的类似雷达扫描效果
- Java : BlockingQueue 阻塞队列
- 完美解决 easyui 请求url时 缓存问题