我试图在加载事件时动态激活/禁用UICollectionReusableView子类上的一些布局约束。
我已经设置了布局约束,一些被激活,一些被停用。(在您问我之前,所有的约束都是强引用的,我知道停用的约束不被保存,并且被解除了)
在刷新代码时,我激活一些约束/禁用其他约束(在调试器中,确保它们都不是nil),在单元上调用setNeedsLayout和layoutIfNeeded,但是什么都不会发生。我将直观地检查布局并检查约束。约束就好像我的代码还没有被击中一样(当然,它被击中了,我已经放置了一个调试器)。没有任何约束被打破,我已经检查了日志。我已禁用的约束仍处于活动状态,而已激活的约束未激活,视觉布局确认了此状态。
我还记录了一些来自awakeFromNib的文本,它只记录了一次,所以没有其他的头实例。
即使命中了代码并正确引用了所有内容,约束未被激活/停用的原因是什么?
发布于 2017-05-10 10:10:28
好的,原来这个问题与所有者视图控制器作为实例变量手动保存的报头视图有关,并且在最初退出队列之后没有退出/重用(viewForSupplementaryElementOfKind:atIndexPath之后总是返回该实例变量)。我的约束没有任何问题。
之前的开发人员由于某种原因手动保留了视图的强引用,并且总是返回相同的视图,这可能会在集合视图的行为中造成一些内部不稳定。我已经将其更正为返回标头单元格的常规dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath方式,问题就消失了。
永远不要持有可重用视图/单元格的引用(或者至少不要忘记在需要时调用dequeue代码并刷新指针)。似乎它会导致无文档/不可预测的布局问题。
https://stackoverflow.com/questions/43887910
复制相似问题