0

以下の方法を使用して、ステータスバーの高さを取得しています。ただし、ビューの読み込み時に高さを取得する必要があるため、それに応じてテーブルビューの高さを調整できます。viewDidLoad でこのメソッドを使用すると、0 が返されます。

私は動作するviewDidAppearでそれを使用しようとしましたが、子ビューから(ナビゲーションコントローラーの一部として)ビューに戻ると、ビューに戻るたびに高さを取得して再度調整します。

では、ビューがロードされたときに高さを取得して、これらの問題に遭遇することなくこの調整を適用するにはどうすればよいでしょうか?

-(CGRect)statusBarFrameViewRect
{
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];

    CGRect statusBarWindowRect = [self.view.window convertRect:statusBarFrame fromWindow: nil];

    CGRect statusBarViewRect = [self.view convertRect:statusBarWindowRect fromView: nil];

    return statusBarViewRect;
}

ありがとう。

4

1 に答える 1

2

でステータス バーとナビゲーション バーの両方の高さを取得できました-viewDidLoad。この新しいビューのロード中にステータス バーのイン/アウトも切り替える場合は、 に登録することをお勧めしますUIApplicationWillChangeStatusBarFrameNotification。ステータスバーフレームも取得できます-[appDelegate application:didFinishLaunchingWithOptions:]

- (void)viewDidLoad
{
    [super viewDidLoad];
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    // (CGRect) $1 = origin=(x=0, y=0) size=(width=320, height=20)
    CGRect navBarFrame = self.navigationController.navigationBar.frame;
    // (CGRect) $2 = origin=(x=0, y=20) size=(width=320, height=44)
}

余談ですが、個々のビューは特にステータス バーを気にする必要はないと思います。そのため、ステータス バーをオーバーレイとして使用している可能性があると思います。その場合 (Photos.app がこれを行います)、 のcontentInset代わりに を調整することを検討してheightください。

于 2013-01-12T23:27:59.250 に答える