0

我一直在使用下面的方法来获取状态栏高度。但是我需要在视图加载时获取高度,以便我可以相应地调整我的 tableview 的高度。在 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 回答