Tag: 安全区域

UIKit安全区域继承:

它真的有效吗? 在2018年的WWDC演讲中,David Duncan指出了适用于各种尺寸和形状的UIKIT应用 ,子视图继承了父视图的安全区域。 因此,当您获得子视图的安全区域插图或其安全区域布局指南时,将看到与父视图的安全区域重叠的安全区域。 还是会吗? 例1 当我创建一个父视图时,然后添加一个带有内部视图的容器视图,这两个视图都有自己的视图控制器,继承就起作用了。 包含的UIView与预期一样,从父视图控制器继承了安全区域,同样,布局指南也是正确的。 这里是链接: misbell / SafeAreaInheritanceWorks 通过在GitHub上创建一个帐户来促进misbell / SafeAreaInheritanceWorks开发。 github.com 例子2 创建父视图时,然后直接在父视图上添加一个子视图,然后在子视图的顶部添加内部带有视图的容器视图,该子视图不会继承安全区域,所包含的视图也不会继承(此处未显示,但未显示。) 子视图的安全区域显然不是从父视图继承的。 难道我做错了什么? 还是按预期工作,我不明白为什么? 这是链接。 misbell / SafeAreaInheritanceNOTWorks 通过在GitHub上创建一个帐户来促进misbell / SafeAreaInheritanceNOTWorks开发。 github.com 后来:.. 我尝试在根视图和包含的视图上都添加动态子视图。 动态添加到根视图的子视图仍未收到传播的安全区域值。 动态添加到所包含视图的子视图确实收到传播的安全区域值。 我猜测何时以及如何传播安全区域值存在问题。 这是动态创建代码的链接: misbell / SafeAreaInheritanceDynamic 通过在GitHub上创建一个帐户来促进misbell / SafeAreaInheritanceDynamic开发。 github.com 思想 因此,如果我在争论这个问题,我会说,看,伙计,没有必要将saef区域插图传播到根视图上的子视图,这些视图没有被嵌入并且没有自己的视图视图控制器,只是普通的旧子视图。 根据定义,您位于根视图控制器中,您知道安全区域在哪里,并且可以对其进行调整,无论是在Storyboard中还是在代码中动态进行调整。 鉴于如果您的嵌入式视图带有其自己的视图控制器,则需要访问父视图的安全区域,而将它们获取给您的唯一方法是通过传播-很好,这很有意义。 令我震惊的是DD在WWDC谈话中的评论,即子视图传播了安全区域插图。 暗示所有子视图都可以得到它们,并且不,不,它们不能,并非在所有情况下都可以。

Xcode的安全区域

当视图在屏幕上可见时,本指南将反映该视图未被其他内容覆盖的部分。 视图的安全区域反映了导航栏,标签栏,工具栏和其他祖先覆盖的区域,这些区域使视图控制器的视图变得模糊。 (在tvOS中,安全区域合并了屏幕的边框,如UIScreen的overscanCompensationInsets属性所定义。)它还覆盖了视图控制器的overscanCompensationInsets属性所定义的任何其他空间。 如果视图当前未安装在视图层次结构中,或者在屏幕上尚不可见,则布局指南始终与视图的边缘匹配。 对于视图控制器的根视图,此属性中的安全区域表示被遮盖的视图控制器内容的整个部分,以及您指定的任何其他插图。 对于视图层次结构中的其他视图,安全区域仅反映该视图中被遮盖的部分。 例如,如果视图完全在其视图控制器的根视图的安全区域内,则此属性中的边插入为0。 根据苹果的说法, Xcode 9 —发行说明 Interface Builder使用UIView.safeAreaLayoutGuide代替了UIViewController中已弃用的顶部和底部布局指南。 要使用新的安全区域,请在文件检查器中为视图控制器选择“安全区域布局指南”,然后在内容和新的安全区域锚点之间添加约束。 这样可以防止您的内容被顶部和底部的条以及tvOS上的过扫描区域所遮盖。 部署到早期版本的iOS时,对安全区域的约束将转换为“顶部”和“底部”。 这是现有(顶部和底部)布局指南和“安全区域布局指南”之间的比较(以产生类似的视觉效果),仅供参考。 自动版式 如何使用安全区域布局? 请按照以下步骤查找解决方案: 如果未启用,请启用“安全区域布局”。 如果它们显示与Super View的连接,则删除“所有约束”,然后使用安全的布局锚点重新附加所有约束。 或双击约束并编辑从超级视图到SafeArea锚点的连接 这是示例快照,如何启用安全区域布局和编辑约束。 这是上述更改的结果 使用SafeArea进行布局设计 为iPhone X设计时,必须确保布局充满屏幕,并且不会被设备的圆角,传感器外壳或用于访问主屏幕的指示器所遮盖。 使用标准的,系统提供的UI元素(例如导航栏,表格和集合)的大多数应用会自动适应设备的新尺寸。 背景材料延伸到显示器的边缘,并且UI元素已适当插入和放置。 对于具有自定义布局的应用程序,支持iPhone X也应该相对容易一些,尤其是如果您的应用程序使用自动布局并遵守安全区域和边距布局指南。 这是示例代码(请参阅: 安全区域布局指南 ) : 如果您在代码中创建约束,请使用UIView的safeAreaLayoutGuide属性获取相关的布局锚点。 让我们在代码中重新创建上面的Interface Builder示例,以查看其外观: 假设我们在视图控制器中将绿色视图作为属性: 私人让greenView = UIView() 我们可能有一个函数来设置从viewDidLoad调用的视图和约束: 私人功能setupView(){ greenView.translatesAutoresizingMaskIntoConstraints =否 greenView.backgroundColor = .green view.addSubview(greenView) } 像往常一样使用根视图的layoutMarginsGuide创建前缘和尾缘边距约束: 让margins […]