使用XIB自定义cell,并且使用了Masonry,所以在awakeFromNib 方法中是拿不到正确的frame的。拿到的是xib中初始设置的大小。机智的我,把设置方法写到了layoutSubviews中。果然还是不正确。
layoutSubviews的调用时机:
- addsubview方法,会触发父view和子view的layoutSubviews方法;
- 设置了不同的frame,会触发;
- scrollview滑动的时候,触发scrollview及子view的layoutSubviews方法;
- 设备旋转,触发vc的layoutsubviews;
- removeFromSuperView,会触发父view的layoutsubviews。
为了在layoutSubviews中拿到正确的frame,要强制让cell布局一次,同事给的方法是在layoutSubviews中强制cell更新。暂时未发现异常。
- (void)layoutSubviews {
[super layoutSubviews];
[self.contentView setNeedsLayout];
[self.contentView layoutIfNeeded];
// your code here
// ...
}
如果你看到此文,如果你有更好方法,请留言,谢谢。
网友评论