iOS11 新特性,如何适配iOS11(二)

管理margins 和 islets

layout margins

基于约束的Autolayout,使我们方便的布局视图。Auto layout为每一个View 都定义了margin。margin是指控件显示内容的边缘与控件边缘的距离。

可以用layoutMargins或者layoutMarginsGuide属性获得view的margin,margin是视图内部的一部分。layoutMargins允许获取或者设置UIEdgeInsets结构的margin。layoutMarginsGuide则获取到只读的UILayoutGuide对象。

在iOS11新增了一个属性:directional layout margins,该属性是NSDirectionalEdgeInsets结构题类型的属性:

typedef  struct   NSDirectionalEdgeInsets{

CGFloat top,leading,bottom,trailing;

}NSDirectionalEdgeInsetsAPI_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));

layoutMargins是UIEdgeInsets结构体类型的属性:

typedef  struct  UIEdgeInsets{ 

CGFloat   top, left, bottom, right;

}UIEdgeInsets;

从定义来看,NSDirectionalEdgeInsets用leading 和 trailing 代替了left和right。

安全区域(Safe Area)



在iOS11 中topLayoutGuide和bottomLayoutguide被废除了,取而代之的就是safeArea的概念,safeArea好似描述你的视图不被任何内容遮挡的方法。它提供两种方式:safeAreaInsets或safeAreaLayoutGuide来提供给你safeArea的参照值,即 insets 或者 layout guide。 safeArea区域如图所示:


如果有一个自定义的viewController,你可能要添加你自己的bars,增加safeAreaInsets的值,可以通过一个新的属性:addtionalSafeAreaInsets来改变safeAreaInsets的值,当你的viewController改变了它的safeAreaInsets值时,有两种方式获取到回调:

UIView.safeAreaInsetsDidChange()UIViewController.viewSafeAreaInsetsDidChange()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 本文介绍iOS11中在UI方面做了哪...
    阿凡提说AI阅读 607评论 0 1
  • iOS 11 为整个生态系统的 UI 带来了丰富多彩的新风格。在增加用户体验的同时不免也会对我们的现有App带来一...
    Hflydragon阅读 6,716评论 1 9
  • 一、NavigationBar UIBarItem UIBarItem在iOS11在中新增landscapeIma...
    灰s阅读 3,857评论 5 11
  • 本文为作者原创,未经作者允许不得转载。该文同时发表在腾讯bugly公众号:https://mp.weixin.qq...
    sonialiu阅读 101,690评论 74 283
  • 穿行掌声的花朵 ◎六月雪 踏上九月的秋高气爽洪昌先生 开始了 他的教书身涯...
    兴安居士阅读 270评论 0 3