先放图:
滑动了几次后 , 发现 共6条回复 >
这个label 位置出问题了 , debugger视图一下:
顶部约束
不见了... ( 其实 nil 了 )
我的相关代码只是设置了 约束
的 active
if (reply.count > 2) {
self.replyBottomSpace.active = false;
self.moreCommentTopSpace.active = true;
self.moreCommentBottomSpace.active = true;
}else{
self.replyBottomSpace.active = true;
self.moreCommentTopSpace.active = false;
self.moreCommentBottomSpace.active = false;
}
很简单( 渣 ) 的一个判断
很奇怪
在google后很容易找到跟我相同的问题 比如:
https://stackoverflow.com/questions/38051879/why-weak-iboutlet-nslayoutconstraint-turns-to-nil-when-i-make-it-inactive
68
When your outlet is weak, the only strong reference is from the view's constraints property. Deactivating the constraint removes it from that array, so there are no more strong references.
( 当为outlet时weak,唯一的strong引用来自视图的constraints属性。禁用约束将其从该数组中删除,因此不再有强引用。 )
shareedit
苹果的官方文档解释的 active = true / false
实际上是调用的addConstraints
和 removeConstraints
, 解决的图中方式就是outlet 时改为 strong
而不是 weak
这里简单画了一个图:
这样就算 active = false
只是被view中的 contraints
从数组中移除了 但是 self.xxx
还在 不是 nil
这样再下次调用 active = true
的时候会再添加进去
/**
更多评论上方间距约束 如果有 set active的情况 将 weak改为strong
*/
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *moreCommentTopSpace;
完美了.