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

发布于 2022-09-01 15:51:07 字数 688 浏览 22 评论 0

使用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都使用约束,好还是不好,对性能有影响?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

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

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

独行侠 2022-09-08 15:51:07

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文