ios - “translatesAutoresizingMaskIntoConstraints”实际上是如何工作的?
问题描述
我最近开始尝试学习如何完全以编程方式创建 iOS 应用程序。因此,我遇到的第一个障碍是 translatesAutoresizingMaskIntoConstraints 通常必须设置为 false 才能设置约束。
在做了一些研究之后,我很确定三件事。
- AutoresizingMasks 是在引入自动布局系统之前如何实现动态布局(基于屏幕大小/方向的布局)。
- AutoresizingMasks 是一个值,它告诉视图的超级视图在超级视图的边界发生变化时如何调整它的大小。
- translatesAutoresizingMaskIntoConstraints 是一个布尔值,当设置为 true 时(对于代码创建的 UIView,始终默认为 true),告诉 UIKit 框架创建约束,以复制自动布局系统中 AutoresizingMask 属性的行为。
我不明白这些约束是如何实现的。Apple 在他们的文档中声明“系统创建了一组约束,这些约束复制了视图的自动调整大小掩码指定的行为。这还允许您使用视图的框架、边界或中心属性修改视图的大小和位置......”
这是让我感到困惑的部分,我不确定这只是他们的措辞还是我对这个话题的误解。AutoresizingMask 只是一个值,因此能够从中创建约束是没有意义的。它们是否意味着自动生成的约束实际上是基于子视图的框架(AKA childView.topAnchor = superview.topAnchor
)?并且 AutoresizingMask 的值只是确定了基于框架的这些约束中的哪一个被设置?
例如:框架为 (x:0, y:0, width:50, height:50) 的 UIView 和“FlexibleBottomMargin”的 AutoresizingMask。UIKit 是否只是自动创建约束,将视图放置在基于框架的布局的位置,然后省略某些约束(在本例中为底部)以复制掩码的行为?
解决方案
您是正确的,它autoresizingMask
被解释(与框架一起)以确定要创建哪些约束。
在您给系统的示例中,将创建以下约束 -
- 宽度限制为 50
- 高度限制为 50
- 到最近邻居的前导、尾随和顶部约束,到这些邻居的距离固定
- 大于或等于到最近邻居的底部约束以及与该邻居的距离。
这将产生一个 50x50 的视图,该视图水平固定在顶部,并且底部与其邻居之间的空间可以根据需要增长。
推荐阅读
- apache-spark - Databricks/Spark 作业执行的 Java 代码 - 一个执行程序的设置
- javascript - react js组件中的javascript addEventListener不起作用
- ngrx - NGRX; 如何对适配器数据应用过滤器
- c# - 如何创建一条直线并获取线上的所有值c#
- java - Spring Boot:在不同组件之间共享一个 bean
- microsoft-graph-api - 无法使用 Microsoft 图形 API 将应用程序添加到团队
- android - 使用 Android Studio 和 Socket 创建用户登录页面
- angular - 无法读取未定义的属性“有效负载”
- c++ - 用户输入/如果语句保持返回而不是继续
- c# - 在 Rider 中反编译 ASP.NET Core 3.x 源