このコード:石工を使用するとフレームがすぐに取得できないのはなぜですか?
[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がそのブロックをすぐに実行するので、NSLog行の前に終了することを期待しています。 @Bimawaが示唆するように、フレームが直ちに正しくない理由は、@Bimawaが示唆するように、新しい制約をフレームに変換する前にレイアウト・パスが必要であり、これらのパスの1つを実行するには0.1秒で十分です。 – Tim
私はちょうど私ができる最も単純な方法でOPに物を説明しました。 – Glenn
ブロックとは何の関係もありません。 –