【问题标题】:How does "translatesAutoresizingMaskIntoConstraints" actually work?“translatesAutoresizingMaskIntoConstraints”实际上是如何工作的?
【发布时间】:2021-03-23 07:54:07
【问题描述】:

我最近开始尝试学习如何完全以编程方式创建 iOS 应用程序。因此,我遇到的第一个障碍是 translatesAutoresizingMaskIntoConstraints 通常必须设置为 false 才能设置约束。

在做了一些研究之后,我很确定三件事。

  1. AutoresizingMask 是在引入自动布局系统之前实现动态布局(根据屏幕大小/方向而不同的布局)的方式。
  2. AutoresizingMasks 是一个值,用于告诉视图的父视图在父视图的边界发生变化时如何调整其大小。
  3. translatesAutoresizingMaskIntoConstraints 是一个布尔值,当设置为 true(对于代码创建的 UIView 始终默认为 true)时,它会告诉 UIKit 框架创建约束来复制 AutoresizingMask 属性在自动布局系统中的行为。

我不明白这些约束是如何实现的。 Apple 在他们的文档中声明“系统会创建一组约束来复制视图的自动调整掩码指定的行为。这还允许您使用视图的框架、边界或中心属性..."

这是让我感到困惑的部分,我不确定是他们的措辞还是我对主题的误解。 AutoresizingMask 只是一个值,因此能够从中创建约束是没有意义的。 它们是否意味着自动生成的约束实际上是基于子视图的框架(A.K.A. childView.topAnchor = superview.topAnchor)?并且 AutoresizingMask 的值只是确定设置了哪些基于框架的约束?

例如:框架为 (x:0, y:0, width:50, height:50) 且 AutoresizingMask 为“FlexibleBottomMargin”的 UIView。 UIKit 是否只是自动创建约束,将视图放置在基于框架的布局的位置,然后省略某些约束(在本例中为底部)以复制遮罩的行为?

【问题讨论】:

    标签: ios uikit


    【解决方案1】:

    autoresizingMask 被解释(与框架一起)以确定要创建哪些约束是正确的。

    在您给系统的示例中将创建以下约束-

    • 宽度限制为 50
    • 高度限制为 50
    • 到最近的邻居的前导、尾随和顶部约束,到这些邻居的距离固定
    • 与最近邻的距离大于或等于底部约束。

    这将产生一个 50x50 的视图,该视图水平固定在顶部,并且底部与其邻居之间的空间可以根据需要扩大。

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2011-09-27
      • 2021-12-16
      • 2013-03-14
      • 2011-02-11
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多