关于iOS中的布局向导(LayoutGuide)和安全区域(SafeArea)
iOS在默认情况下,竖屏会显⽰状态栏,横屏⾃动隐藏状态栏。⽽视图控制器的主视图默认位于屏幕顶端,在竖屏时会被顶部状态栏遮挡。如果我们希望不被状态栏遮挡,则需要先判断横竖屏,然后动态显⽰隐藏状态栏。如果界⾯中还存在导航栏、分页栏,情况就更复杂⼀些。总之,⾃⼰处理是⼀件很⿇烦的事情。
布局向导
在iOS 7中,苹果引⼊了Top Layout Guide(顶部布局向导)和Bottom Layout Guide(底部布局向导)的概念,它们是界⾯中的两个隐藏视图,分别指⽰当前界⾯中被顶部条形区域(如状态栏StatusBar、导航栏NavigationBar)和被底部条形区域(如分页栏TabBar)占据的区域。
xcode界面topLayoutGuide和bottomLayoutGuide是视图控制器的两个属性(上图中的self是当前的ViewController)。其中顶部布局向导的底部为顶部条形区域的最下⽅,即:
如果没有状态栏和导航栏,则为屏幕顶端。
如果只有状态栏,则为状态栏下⽅(20px)。
如果只有导航栏,则为导航栏下⽅(44px)。
如果同时有状态栏和导航栏,则为导航栏下⽅(64px)。
同理,底部布局向导的顶部为下⽅条形区域的最上⽅。
这两个布局向导会根据界⾯的情况动态调整其⾼度。我们就可以参照这两个布局向导建⽴布局约束,⽆需⾃⼰去判断和实现了。
安全区域
iOS 11引⼊了Safe Area(安全区域)的概念,它指⽰当前界⾯中不被遮挡的区域,有如下特点:
它是⼀个不被顶部条形区域和底部条形区域遮挡的区域。
它不位于曲⾯屏边缘区域(例如iPhone X)。
它能够根据界⾯动态调整⼤⼩。
开发者能够调整安全区域的⼤⼩。
下图为安全区域的⽰意图。
同时,顶部和底部布局向导被标记为废弃(Deprecated)不再推荐使⽤。如果你的项⽬是使⽤⽼版本
Xcode创建,则新版本Xcode会将storyboard/xib⽂件中基于导航向导的约束⾃动转换为基于安全区域的约束。另外,尽管安全区域是iOS 11新增加的,但storyboard⽂件仍然兼容⽼的系统(iOS 8、9、10)。
参考⽂献
1. 苹果官⽅⽂档《Positioning Content Relative to the Safe Area》:
2. Safe Area Layout Guide:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。