iOS Masonry 子对象如何获取已被约束的父对象的size


使用masonry的过程中发现,如果一个View已经用了masonry约束,当想在其上加一个子view 使用initWithFrame 的时候 无法获得父View的Frame来参考。

比如在一个ViewController中加入一个自定义的View,用Masonry约束:


 @implementation ViewController

- (void)viewDidLoad {
    CustomView *aView=[CustomView new];
    [self.view addSubview:aView];
    [aView mas_makeConstraints:^(MASConstraintMaker *make){
        make.edges.equalTo(self.view);
        make.size.equalTo(self.view);
    }];
}

如果我要在CustomView类里加入一个UIImageView,在CustomView.m里配置UIImageView的大小,应该怎样配置更科学,哪个阶段?

1.在CustomView.m内也使用Masonry约束UIImageView?
2.不使用约束的话,如何获得CustomView的frame大小,来配置UIImageView?
3.如果工程里大部分View都使用约束,好还是不好,对性能有影响?

masonry ios objective-c

帕金森太一 9 years, 9 months ago

既然superview使用了autolayout, 那么你在superview添加subview的时候, 应该也是要用autolayout约束的, 这时候subview并不知道superview的frame.

平田君加了个油 answered 9 years, 9 months ago

  1. 你在CustomView.m 里面使用Masonry约束UIImageView是完全没问题的啊,你按照自己希望的比例去约束就好了。Autolayout 最后也是通过设置UIView 的center和bounds在实现的。性能上也没啥问题,

  2. 不使用约束的话,直接重载CustomView.m 的layoutSubviews,里面可以self.frame 就是最后显示的frame

半夜出太阳 answered 9 years, 9 months ago

Your Answer