关于automaticallyAdjustsScrollViewInsets和 edgesForExtendedLayout的理解

一.automaticallyAdjustsScrollViewInsets

automaticallyAdjustsScrollViewInsets是在iOS7.0以后,相对于ScrollView新增属性,默认为YES,系统会根据所在界面的astatus bar, search bar, navigation bar, toolbar, or tab bar等自动调整ScrollView的内边距(inset)。

(1)self.automaticallyAdjustsScrollViewInsets = YES;

ScrollView的原点从(0,64)开始,即tableView的cell相对于tableView的根视图向下调整了一个navigation bar的高度,而tableView的原点在左上角。ScrollView部分不会让导航栏遮盖。(视图里面存在唯一一个UIScrollView或其子类View该属性才会生效


(2)self.automaticallyAdjustsScrollViewInsets = NO;

ScrollView原点就是(0,0)开始,tableview 是从屏幕的最上边开始,也就是被导航栏 & 状态栏覆盖。

假如视图里面存在多个个UIScrollView或其子类View或者在设置自适应后拉刷新不能正常工作时可尝试以下方法:

(3)ScrollView原点就是(0,64)开始

self.automaticallyAdjustsScrollViewInsets = NO;//关掉自适应
self.edgesForExtendedLayout = UIRectEdgeNone;//自行设置

在IOS7之前,tableView的Frame的起始点是(0, 20),在IOS7之后,它的起始点变成了(0,0),这个时候如果为了让下拉刷新能正常工作,必须设置self.edgesForExtendedLayout = UIRectEdgeNone

(这种情况适用于容器建立在UINavigationController)


二.edgesForExtendedLayout

指定边缘要延伸的方向

(1)self.edgesForExtendedLayout=UIRectEdgeAll

四周边缘均延伸,就是说,如果即使视图中上navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域,即表示tableView可延伸到 navigationBar 下面,从顶部边缘(0,0)开始。

(2)self.edgesForExtendedLayout=UIRectEdgeNone

默认是self.edgesForExtendedLayout=UIRectEdgeNone;即tableView从(0,64)处开始。


三.automaticallyAdjustsScrollViewInset=YES和 edgesForExtendedLayout=UIRectEdgeNone的区别

automaticallyAdjustsScrollViewInset=YES,tableView在滑动时会经过导航栏和状态栏的底下,而 edgesForExtendedLayout=UIRectEdgeNone不会经过,所以一般在设置了edgesForExtendedLayout=UIRectEdgeNone后做如下处理:

self.navigationController.navigationBar.translucent = NO;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值