9

ビューの 1 つを呼び出すと、iOS フレームワークが最初に呼び出し、次にそのビューをsizeToFit呼び出すことに気付きました。my の計算は myの結果に依存するため、これは私にとって問題です。次の例では、サブビューが で調整され、このサブビューの高さが で使用されます。現在、私のコードは機能しておらず、順序が逆になっています。sizeThatFitslayoutSubviewssizeThatFitslayoutSubviewslayoutSubviewssizeThatFits

私のView ControllerのviewDidLoadでは:

UIView* header = [[MyHeader alloc] init];
[header sizeToFit];
self.tableView.tableHeaderView = header;
[header release];

私からしてみれば:

- (void) layoutSubviews {
    [super layoutSubviews];
    [self.subView sizeToFit];
}

- (CGSize) sizeThatFits:(CGSize)size {
    return CGSizeMake(
        self.frame.size.width,
        self.subView.frame.size.height
    );
}
4

5 に答える 5

2

レイアウトを正確にする必要がある場合sizeThatFits:は、レイアウトを強制する必要があります (以下のコードを参照してください)。ただし、レイアウトが「サイズ」を考慮していないため、これは設計が不十分だと思います。

- (CGSize) sizeThatFits:(CGSize)size {

    [self setNeedsLayout];
    [self layoutIfNeeded];

    return CGSizeMake(
        self.frame.size.width,
        self.subView.frame.size.height
    );
}

より良いアプローチは、サブビューに自動レイアウトを使用systemLayoutSizeFittingSize:してから、ビューの必要なサイズを決定するために使用することです (vs. sizeThatFits:)

自動レイアウトを使用できない、または使用したくない場合は、実際のレイアウトとレイアウト計算用に別のコード パスを用意することを検討する必要があります。

于 2013-12-11T17:19:34.997 に答える
1

layoutIfNeededビューに force を呼び出してみましたlayoutSubviewsか? 誤解を招く名前にもかかわらず、これはすぐに をトリガーする方法layoutSubviewsです。sizeToFitまたはの前にこれを呼び出してみてくださいsizeThatFits

于 2013-12-11T16:57:27.037 に答える
0

-layoutSubviewsメソッドの代わりにメソッドでサブビューのフレームを変更することはできません-sizeThatFits:か?

于 2012-08-27T19:40:44.010 に答える