iOS Masonry或xib设置约束布局,获取真实的Frame

应用场景如下:在使用Masonry或者xib时,有时候需要变更约束条件,比如适配内容高度,就需要将某个控件的高度约束变更,这时候如果我们需要获取frame,就会发现是约束未变更前的,那如何获取真实frame呢?
产生该问题的原因为:
1、任何原因引起View的尺寸被改变

2、调用ViewController的“viewWillLayoutSubviews”方法

3、未启用Autolayout情况,调用“layoutSubviews”

4、启用Autolayout情况,调用ViewController的"updateViewConstraints"方法。在这个方法里,会调用所有subview的“updateConstraints”方法。

5、当界面被刷新后,调用ViewController的“viewDidLayoutSubviews”

解决方案方法一:

self.gameTagSuperviewHeight.constant = 30 + ceil(gameTagArr.count / 4.0) * 40;
// 先调用superView的layoutIfNeeded方法再获取真实的frame            
[self.view layoutIfNeeded];          
NSLog(@"%@", self.gameTagSuperview);

解决方案方法二:

self.gameTagSuperviewHeight.constant = 30 + ceil(gameTagArr.count / 4.0) * 40;
// 0.1秒后获取frame
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    NSLog(@"%@", self.scrollView);
});

你可能感兴趣的:(iOS Masonry或xib设置约束布局,获取真实的Frame)