automaticallyAdjustsScrollViewInsets和edgesForExtendedLayout和extendedLayoutIncludesOpaqueBars

将automaticallyAdjustsScrollViewInsets和edgesForExtendedLayout和extendedLayoutIncludesOpaqueBars三个放在一起来看,因为三者之间会有一定的相互影响

1.edgesForExtendedLayout

typedef NS_OPTIONS(NSUInteger, UIRectEdge) {
    UIRectEdgeNone   = 0, // 没有延伸效果
    UIRectEdgeTop    = 1 << 0, // 上部延伸
    UIRectEdgeLeft   = 1 << 1, // 左延伸
    UIRectEdgeBottom = 1 << 2, // 底部延伸
    UIRectEdgeRight  = 1 << 3, // 右延伸
    UIRectEdgeAll    = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight // 四个方向都延伸


@property(nonatomic,assign) UIRectEdge edgesForExtendedLayout


UIViewController 的这个属性从名字上来看,就可以得到一些有用的信息:

edgesForExtendedLayout 边缘延伸布局。

也就是说视图布局的时候是否延伸?为什么说延伸或者为什么会延伸呢?

比如:导航控制器,在导航控制器下的控制器情况下,视图的显示区域是屏幕上方就开始计算坐标了,其实就是边缘延伸到了上方,也即是UIRectEdgeTop导致的效果

最直接影响的就是self.view。在延伸的情况下self.view 的高度为 屏幕高度减去 64

例如:

<span style="font-size:14px;">UIView * view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)];
    view.backgroundColor = [UIColor redColor];
    [self.view addSubview:view];</span>

这样添加一个view之后,红色的区域从状态栏就开始了,也就是延伸到了导航的下面

打印self.view.frame 为

<span style="font-size:14px;">{{0, 64}, {320, 568}}</span>

现在把edgesForExtendedLayout设置为UIRectEdgeNone ,可以看到已经在导航的下面

打印self.view.frame 为

<span style="font-size:14px;">{{0, 64}, {320, 504}}</span>

同样其它UIRectEdgeLeft,UIRectEdgeRight,UIRectEdgeBottom 这是这样的原理。


其实对于edgesForExtendedLayout 这个属性还是很漂亮的,在导航半透明的情况下,一些模糊的效果还是挺好看的。例如微信的导航就是半透明。


2.automaticallyAdjustsScrollViewInsets     //自动调整scrollView的缩进

顾名思义就是是否自动调整scrolloView的缩进

如:iPhone手机的短信软件的短息列表,当我们滑动的时候,信息内容会滑动到导航的下面。

下面看一下这个属性的影响。

如上图scrolloView距离顶部为0,scrolloVIew 的背景色为CyanColor;

下面让其被Push出来,看一下效果

可以看到scrolloView 在屏幕顶端就开始显示,但是他的内容却被自动缩进到了导航栏的下方。这是系统自动为scrolloView缩进了64个单位。

现在设置self.automaticallyAdjustsScrollViewInsets 为NO.

效果如图:


很明显scrolloView 并没有被缩进,全部现在了导航栏的下方。。。

到这里差不多也能看到automaticallyAdjustsScrollViewInsets的真正作用了。

但是还是有几个注意点的

【注意】:

1.当我们设置edgesForExtendedLayout 为UIRectEdgeNone 的时候,automaticallyAdjustsScrollViewInsets 这个无论怎么设置都不会产生影响了。

2.automaticallyAdjustsScrollViewInsets在非导航或TabBar 等特殊控件影响下,也是没有作用的

3.在导航控制器或TabBar控制器下,无论scrolloView 在什么位置都会被自动产生缩进。这点是非常不好的。所以写代码的时候要注意一下。可以将当前控制器的automaticallyAdjustsScrollViewInsets设置为NO,消除影响。

3.extendedLayoutIncludesOpaqueBars


@property(nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0.
顾名思义就是,扩展布局是否包括半透明的Bars(NavigatinBar,TabBar)。默认的为NO;

苹果这样做是很人性化的,如果bars不是半透明的情况下,再使延伸布局到bars的下方,这样感觉是毫无意义的,所以在bars不为半透明的情况下,默认不会延伸布局。

当然我们可以设置self.navigationController.navigationBar.translucent = NO; 取消导航的半透明效果。结果如下:

打印self.view.frame 结果如下:
{{0, 64}, {320, 504}}。

其实就是等同的设置了

self.edgesForExtendedLayout = UIRectEdgeNone;

【注意】

如果还存在TabBar的情况下,并且TabBar为半透明,同样还会延伸到TabBar的下方




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值