【问题标题】:How can I get autolayout to override a UIImageView's intrinsic size?如何获得自动布局以覆盖 UIImageView 固有大小?
【发布时间】:2014-09-08 13:22:05
【问题描述】:

我在UISplitViewController 中的详细视图的自动布局方面遇到了问题。我的视图层次结构包含一个带有装饰元素的UIImageView,并且图像视图的固有大小似乎搞砸了其余控件的布局。

这些是我为图像视图指定的约束:

H:[UIImageView:0xc83ba90]-(NSSpace(20))-|
H:|-(NSSpace(20))-[UIImageView:0xc83ba90]
UIImageView:0xc83ba90.bottom == UITextField:0xc83d2d0.bottom
V:[UIImageView:0xc83ba90 (3)]>,
H:[UIImageView:0xc83ba90 (532)] Hug:1 CompressionResistance:750
V:[UIImageView:0xc83ba90 (2)] Hug:250 CompressionResistance:750

我想要的行为是调整图像视图的大小以填充其父视图,如前两个约束所述。我看到的实际行为是图像视图只占用由其固有大小约束描述的水平空间。它似乎也在改变其所有兄弟视图的布局,就好像超级视图只是在一个与图像视图一样宽的矩形中布置视图。

我认为尽可能低地指定图像视图的拥抱优先级会让其他约束覆盖它以调整图像视图的大小。我在这里做错了什么?

【问题讨论】:

  • UIImageView does not define an intrinsic content size by default。你能发一张IB的照片让我们看看布局吗?仅使用文本很难了解您想要做什么。
  • Interface Builder 的哪一部分?涉及到很多控制。看起来 UIImageView 将其图像的大小作为其固有大小。
  • 遇到同样的问题。假设图像是 300x100。我希望它在 iPad 和 iPhone 上保持相同的 比例。但是,它的原始大小会覆盖任何动态约束。所以要么在 iPad 上看起来太小,要么在 iPhone 上看起来太大。
  • @Greg,您找到任何解决方案了吗?
  • @GuillaumeAlgis 您上面的链接指的是UIView,而不是UIImageView

标签: ios uiimageview autolayout uisplitviewcontroller


【解决方案1】:

所以,我终于找到了解决办法。

解决方案是将superview 的拥抱优先级提高到.defaultHigh,并将UIImageView 的抗压优先级降低到.defaultLow。这将使约束覆盖图像的固有大小。

Content Hugging Priority - 此优先级越高,视图越能抵抗增长超过其固有内容大小。

内容压缩阻力优先级 - 此优先级越高,视图越能抵抗缩小到小于其固有内容大小的程度。

【讨论】:

  • 不错,解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多