【问题标题】:iOS - Auto Layout issue with constraints priority and compression resistanceiOS - 具有约束优先级和压缩阻力的自动布局问题
【发布时间】:2018-07-08 00:18:34
【问题描述】:

我一直在努力提高自己关于 Auto Layout 和创造设计的能力。

我已经阅读了很多关于约束优先级抗压拥抱优先级以及内在内容大小的内容.

在我的项目中重新创建了几乎所有 xib/storyboard 文件后,我一直在为自定义 UICollectionViewCell 的简单设计而苦苦挣扎。

这是所需的设计:

但我似乎无法创建适当的约束来处理所有屏幕分辨率(特别是 iPhone 5)。

这是我所做的:

我创建了 2 个单独的视图,顶部的标题视图和内容视图。

关于蓝色和灰色视图:

现在为了在不同的屏幕设备上始终具有大致相同的外观,我在 blue viewcontentView (white view) 之间添加了约束 equal height,并使用常量 1:3 .这意味着蓝色视图将始终是父白色视图的 1/3。

对于gray view,我添加了一个equalHeight 约束,其中blue view 等于1:2

UILabel 和 2 个 UIImage 视图:

现在有趣的部分开始了,我已经为蓝色视图中的UILabel 设置了trailingtopbottom 约束,对于外部的大ImageView 设置相同但leading,带有@ 987654342@ 在UILabel 和警报图标Image View 之间,horizontal constraint2 Images Views 之间。

现在我知道我有自动布局约束歧义,因为它不知道要压缩或剪辑哪个元素。

编辑:所以我将 UILabel 的内容拥抱优先级更改为 1000,现在我拥有了所有 3 个元素,但在 iPhone 5 上,结果是一场灾难。

编辑:这是一个包含所有约束的全局图像。在 iPhone 5 上看起来不太好。

【问题讨论】:

  • 你能分享你的代码吗?
  • 始终包含代码,而不仅仅是您对代码的假设。只有代码 100% 正确地描述了情况
  • 我添加了一个编辑

标签: ios autolayout interface-builder constraints nslayoutconstraint


【解决方案1】:

您有一个约束不明确,因为您必须为 alertImageView 和 warningImageView 设置宽度/高度约束,除了将标签的 contentHugging 优先级水平设置为 1000

尽管不在同一个容器上,也可以在 alertView 和 warningView 之间创建 H 间距。

【讨论】:

  • 我没有在 imageView 或warningImageView 上设置任何宽度或高度约束。只是顶部,底部,领先和尾随。 contentHugging 优先级为 1000 成功了,让我在小屏幕上查看。
  • 从您的设计中我得出结论,您必须将纵横比 1 设置为高度等于 1/2 contentView 的 alertView ,warningImageV 将其高度设置为 blueView 的 1/2 以及 aspectRatio 1 ,试试看
  • 为什么要设置纵横比?当我这样做时,一切都会因错误而变红。
  • 如果你设置 top , bottom ,leading , 约束你不必这样做,但你应该给 alert imageView 一个宽度
  • 我无法在小屏幕上为白色和蓝色视图保持相同的纵横比/尺寸。白色视图是蓝色视图的 1/2 高度,但它们不在内容视图的中心。他们几乎在底部
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多