Autolayout 抱怨 UIImageView 的前导/尾随空间

Posted

技术标签:

【中文标题】Autolayout 抱怨 UIImageView 的前导/尾随空间【英文标题】:Autolayout is complaining about leading/trailing space for UIImageView 【发布时间】:2014-11-29 01:03:23 【问题描述】:

我在情节提要中有一个 UICollectionViewCell,里面有一个 UIImageView。

UICollectionViewCell size is width: 189, height: 239 。 ImageView 有以下约束:

Trailing Space to cell = 31
Leading Space to cell = 31
Bottom Space to cell =  25
Top Space to cell = 31

我在运行时收到以下错误:

2014-11-28 19:53:33.934 AppName[1585:35698] 无法 同时满足约束。可能至少其中之一 以下列表中的约束是您不想要的。试试这个:(1) 查看每个约束并尝试找出您不期望的约束; (2) 找到添加了不需要的约束的代码 并修复它。 (注:如果你看到 NSAutoresizingMaskLayoutConstraints 你不明白的,参考 到 UIView 属性的文档 translatesAutoresizingMaskIntoConstraints) (

"<NSLayoutConstraint:0x7fa4a0d75220 H:[UIImageView:0x7fa4a0d743e0]-(31)-|   (Names: '|':UIView:0x7fa4a0d73d40 )>",
"<NSLayoutConstraint:0x7fa4a0d752c0 H:|-(32)-[UIImageView:0x7fa4a0d743e0]   (Names: '|':UIView:0x7fa4a0d73d40 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7fa4a0d567a0 h=--& v=--& H:[UIView:0x7fa4a0d73d40(50)]>" )

将尝试通过打破约束来恢复 NSLayoutConstraint:0x7fa4a0d75220 H:[UIImageView:0x7fa4a0d743e0]-(31)-| (名称: '|':UIView:0x7fa4a0d73d40 )>

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点 在调试器中捕获它。中的方法 UIView 上的 UIConstraintBasedLayoutDebugging 类别列于 也可能有帮助。

我尝试以各种方式(尝试偶数/奇数)更改前导/尾随值,但没有成功。这是什么原因造成的?

【问题讨论】:

它是否向您显示了约束列表并告诉您它试图打破哪个约束?如果是这样,请发布该信息。 更新问题,*** 的格式导致某些文本不出现 最后一个约束是说视图 UIView:0x7fa4a0d73d40,大概是你的单元格,宽度为 50。你在集合视图的数据源中为你的单元格返回什么大小?跨度> 奇怪的是,我没有在任何数据源方法中修改单元格的大小,我只在情节提要中设置了单元格的宽度/高度。我使用self.collectionViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) 将collectionView 添加到VC 中,如果这有影响的话。 我只实现func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -&gt; UICollectionViewCell func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -&gt; Int func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 【参考方案1】:

这是 ios 8 中的一个已知错误(请参阅这篇文章,Autoresizing issue of UICollectionViewCell contentView's frame in Storyboard prototype cell (Xcode 6, iOS 8 SDK) happens when running on iOS 7 only)。单元格是您在情节提要中设置的正确大小,但单元格的内容视图大小保持在 50x50,这就是您收到约束错误的原因。在 cellForItemAtIndexPath: 中创建单元格后,可以通过添加此行来修复它:,

cell.contentView.frame = cell.bounds

【讨论】:

谢谢,值得注意的是,尽管运行 iOS8.1.1 还是发生了这种情况 在 iOS 9.3.4 中仍然如此

以上是关于Autolayout 抱怨 UIImageView 的前导/尾随空间的主要内容,如果未能解决你的问题,请参考以下文章

使用 AutoLayout 缩放 UIImageView 以适应宽度

AutoLayout:UIImageView 和 Aspect Fit 内容模式

使用 AutoLayout 缩小 UIImageView 高度

swift-无法使用 AutoLayout 在 UIScrollView 中居中 UIImageView

更改 UIImageView 大小以匹配图像与 AutoLayout

如何防止 UIImageView 使用 Autolayout 调整大小