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) -> UICollectionViewCell func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> 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