UICollectionViewCell上的Swift NSAutoresizingMaskLayoutConstraint会发出警告,但布局工作正常

时间:2017-02-20 17:48:39

标签: swift3 uicollectionviewcell uicollectionviewlayout ios-autolayout

我正在使用具有自定义布局的UICollectionVewCell,其中不同单元格的高度因单元格而异。我用过这里描述的方法 https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest

我在故事板中设置了单元格,所有约束似乎都很满意。当我运行代码时,我得到了我想要的单元格布局。没问题。

问题是在日志中我看到一个NSAutoresizingMaskLayoutConstraint似乎与我自己的约束相冲突。 NSAutoresizingMaskLayoutConstraint是xcode自己添加的东西。此约束由xcode自动放置在CollectionViewCell自己的内容视图上(此内容视图仅在视图层次结构中可见,而不在文档大纲中可见)。

2017-02-19 21:54:28.999546 TestProject[6612:395125] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 

(     "&#34 ;,     "&#34 ;,     "&#34 ;,     "&#34 ;,     "&#34 ;,     "&#34 ;,     "" )

将尝试通过违反约束来恢复

在UIViewAlertForUnsatisfiableConstraints上创建一个符号断点,以便在调试器中捕获它。

View Hierarchy

我看到很多其他人都有类似的问题,但是关注这些帖子并尝试列出的所有解决方案并没有帮助我摆脱约束中的错误/冲突。我曾尝试过的一些帖子是 Unable to simultaneously satisfy constraints, will attempt to recover by breaking constraint How to trap on UIViewAlertForUnsatisfiableConstraints?

几乎接近修复它的解决方案之一就是将约束的优先级更改为999.但是这会增加一些看起来不太好的空白。

有关如何删除此NSAutoresizingMaskLayoutConstraint警告而不必更改我手动设置的约束的任何建议?

感谢。

1 个答案:

答案 0 :(得分:2)

我意识到这是不久前的事,但我主要是为未来寻求帮助的人发表此评论。

我最近遇到了一些带有动态高度和NSAutoresizingMaskLayoutConstraint的UICollectionViewCell子类的问题,并且还仔细阅读了你提到的其他链接而没有成功。

在我的情况下,我有两个子视图:subview A固定到superview.top/left/right,然后将底部固定到子视图B,它固定在superview.left / right / bottom。我已经给A和B指定了明确的高度值(高度= 50,高度= 300,那种东西),在那种情况下我和你有同样的事情 - 一个关于约束的自动布局错误同时满意,但布局本身就很好了。

最后,我删除了子视图A的高度限制,取而代之的是不同的仍然让它成为合适的高度(我有一个标签,所以我固定标签的顶部/底部间距而不是明确地固定A的高度)。当我仍然能够维持我需要的布局时,控制台错误就消失了。所以我不知道为什么,但似乎对我来说,当从单元格的顶部到底部有明确的高度时会发生错误。改变它以使一个或多个视图通过间距约束而不是高度约束固定似乎更好。

(对于将来拼命搜索的其他人的奖励跟进:我后来尝试通过更改其高度约束常量来调整子视图B的大小,这又导致了控制台错误但是布局正确。在这种情况下,然后,将子视图B的高度约束的优先级更改为999允许错误消失。)