UICollectionReusableView约束不更新

时间:2017-05-10 09:00:49

标签: ios autolayout

我尝试在某些加载事件时动态激活/停用我的UICollectionReusableView子类上的某些布局约束。

我已经设置了布局约束,有些已激活,有些已停用。 (在您提出之前,我的所有约束都被强烈引用,我知道已停用的约束不会被取消分配

刷新代码后,我激活一些约束/停用其他约束(在调试器中,确保它们都不是nil),在单元格上调用setNeedsLayoutlayoutIfNeeded,但没有任何反应。我直观地检查布局并检查约束。约束就好像我的代码甚至没有被击中(当然,它被击中,我已经放了一个调试器)。没有任何约束被破坏,我已经检查了日志。我已停用的约束仍然有效,并且未激活我激活的约束,并且可视布局确认了此状态。

我还记录了awakeFromNib中的一些文字,并且只记录了一次,因此标题不是另一个实例。

即使代码被命中并且所有内容都被正确引用,未激活/停用约束的原因可能是什么?

1 个答案:

答案 0 :(得分:0)

好的,事实证明问题与所有者视图控制器作为实例变量手动持有的标题视图有关,并且一旦它最初出列后就没有出列/重用(viewForSupplementaryElementOfKind:atIndexPath总是返回之后的实例变量)。我的约束没有任何问题。

之前的开发人员出于某种原因手动持有视图的强引用并始终返回相同的视图,这可能会导致集合视图的行为出现内部不稳定。我已将其更正为常规dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath方式返回标题单元格,问题就消失了。

永远不要抓住可重复使用的视图/单元格的引用(或者至少,不要忘记在需要时调用出列代码并刷新指针)。似乎它会导致无证/不可预测的布局问题。

相关问题