【问题标题】:What is the difference of intrinsic size vs system width/height constraints?固有尺寸与系统宽度/高度约束有什么区别?
【发布时间】:2013-10-30 08:23:37
【问题描述】:

开始从弹簧和结构布局转向自动布局,并对“固有尺寸”设置有一些疑问。

如果您将某些视图的“固有大小”设置为“占位符”并放置一些宽度和高度值,则视图将不会缩放并保持固定大小。但是如果我们将“固有大小”设置为“默认(系统定义)”,那么系统将在运行时根据需要决定并缩放视图。

但是,我们可以使用 Ctrl + Drag 显式设置视图的宽度和高度系统约束。在这种情况下,将存在系统宽度和高度约束以及 const 占位符值。我正在审查现有代码并试图了解这是一个错误,应该删除多余的系统宽度和高度约束,或者还有其他一些隐藏的逻辑。但是,Xcode 在运行时不会在控制台中显示任何警告等。这是演示项目的打印屏幕:

【问题讨论】:

    标签: ios objective-c autolayout


    【解决方案1】:

    当您将固有大小设置为“占位符”时,您告诉 Xcode 布局系统您的视图将具有取决于其内容的大小(就像标签可以取决于其文本内容)。系统只知道并维护自己的具有固有大小的视图类型。如果您希望对自己的视图有类似的体验,请将视图视为具有内在大小。然后你设置你的约束,好像视图应该根据它的内容增长或缩小。最后,您实现intrinsicContentSize 方法来计算并返回正确的内容大小。如果内容发生变化并且应该执行新的计算,您可以在视图上调用invalidateIntrinsicContentSize。根据您设置约束的方式,您的视图将增长和/或缩小,或者它将是静态的(就像您可以在标签上设置宽度和高度约束,并且它保持静态)。

    【讨论】:

    • 嗯,使用自定义宽度和高度设置“占位符”不会根据其内容缩放 UILabel(“取决于其内容”)。
    • 如果添加宽度和高度约束,它不会缩放标签。
    • 我刚刚创建了新项目并添加了一个带有更大框架的标签。然后确实设置了“占位符”并在宽度和高度复选框中选择了“无”。什么也没发生,并且标签没有调整大小以适应其内容。我没有设置任何限制。
    • 如果您不添加任何约束(例如从边缘到超级视图的间距,至少),那么 Xcode 会添加硬编码约束,其中还包括宽度和高度。尝试向超级视图添加左侧空间约束,以及向超级视图添加顶部空间约束(通过 ctrl 从视图拖动到超级视图)。你会看到 Xcode 告诉你标签对于它的内容来说太大了。您不应该为标签设置占位符固有大小,系统熟悉它们的工作方式并正确推断。
    • 好极了。使用 MyCustomView 创建了新项目,并在 MyCustomView 类中覆盖了 intrinsicContentSize。然后添加具有宽度和高度的“占位符”,瞧。调用了 intrinsicContentSize 并调整了 MyCustomView 的大小。谢谢!
    【解决方案2】:

    如果您熟悉 android 中的 wrap_content,则 intrinsicContentSize 与 wrap_content 相同。

    【讨论】:

      【解决方案3】:

      每个包含内容的视图都可以计算其固有的内容大小。内在内容大小由每个 UIView 实例上的方法计算。该方法返回一个 CGSize 实例

      【讨论】:

        【解决方案4】:

        Intrinsic size设置为Placeholder时,containerView根据自己的subView(containeeView)计算自己的高度

        containerView 会根据里面的内容而增长或缩小。

        -设置视图的宽度和位置,而不是高度 -set view.intrinsicSize = 占位符 - 在视图内放置标签 - 将标签捕捉到视图的所有边框 - 不要为标签设置高度(或使用 >= 运算符设置高度。不是 = 运算符) - 设置标签为lines=0, lineBreak=WordWrap

        根据内容大小,标签的高度会增大或缩小。 视图将根据标签高度增加或缩小高度。

        【讨论】:

          猜你喜欢
          • 2019-04-19
          • 2011-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多