xib中的frame

使用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
    // ...
}

如果你看到此文,如果你有更好方法,请留言,谢谢。

你可能感兴趣的:(xib中的frame)