【问题标题】:Autolayout - relationship between two objects, which is "dominant"?自动布局 - 两个对象之间的关系,哪个是“主导”?
【发布时间】:2018-03-15 05:43:38
【问题描述】:

假设我在屏幕上有两个对象。我将其中一个定位到我想要的位置和大小。

另一个对象的约束是:

  • 将中心 X 与对象 1 对齐
  • 将 Y 中心与对象 1 对齐
  • 与对象 1 等宽
  • 与对象 1 等高

那么...为什么对象 1 会发生变化以满足第二个对象的高度/宽度,而不是相反 - 从而也将定位设置为不正常?我要求第二个对象的大小和位置与对象 1 的大小和位置相同,有这 4 个约束,不是吗?

感谢您的解释!

编辑: 第二个对象是一个 UIImageView,其中“Aspect Fit”设置为内容模式。对象 1 是一个 UILabel。

【问题讨论】:

    标签: ios xcode user-interface autolayout constraints


    【解决方案1】:

    所有视图都需要从某个地方获取它们的高度和宽度。但是您没有为任一视图提供高度或宽度。

    如果您不提供高度/宽度约束,图像视图和标签都从它们的intrinsicContentSize 获取高度和宽度。

    intrinsicContentSize 被转换为优先级由每个轴的Content Hugging PriorityContent Compression Resistance Priority 确定的约束。

    如果您查看两个视图的这些值(在故事板中的大小检查器中,或者如果您在代码中创建它们,则在代码中),您将看到这是一个僵局或图像视图具有更高的优先级并获胜。无论哪种方式,您都需要通过提高或降低其中一个视图的优先级来以希望解决的方式解决战斗。

    【讨论】:

    • 如果你在应用运行的时候使用View Debugger,这一切都会清楚很多。您甚至可能会看到一个感叹号和一个警告,表明您的布局不明确。
    • 奇怪 - 两个对象的水平/垂直内容压缩阻力优先级均为 750。在 UIImageView 上将其更改为 255 水平/垂直压缩阻力优先级并不能解决问题,但将其更改为 250 可以。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多