gpt4 book ai didi

ios - 为什么我用masonry的时候不能立马拿到相框?

转载 作者:行者123 更新时间:2023-11-28 21:04:48 24 4
gpt4 key购买 nike

这段代码:

[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0));
}];
NSLog(@"%@", self.scrollView);

结果是:<UIScrollView: 0x7faad400cc00; frame = (0 0; 0 0)

但是这段代码:

[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0));
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"%@", self.scrollView);
});

结果是:<UIScrollView: 0x7ff8d1043200; frame = (0 0; 375 667);

为什么我不能立即获取到帧,但我可以在 0.1 秒后获取?

最佳答案

Masonry 是自动布局的包装器,自动布局在 - (void)layoutSubviews; 方法中计算自己的框架,只有在那之后你才能获得所有 View 的框架。

砌体方法 mas_makeConstraints 和类似的只是设置约束。

如果你需要更新约束,你必须调用mas_remakeConstraints:它只是更新约束,为了更新 View 的框架,我们必须调用方法setNeedsLayout来设置一个关于重新计算的标志在下一个显示周期中,如果我们想立即更新帧,我们必须调用 layoutIfNeeded 方法。

关于ios - 为什么我用masonry的时候不能立马拿到相框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46387298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com