状态栏高度在viewDidLoad期间

时间:2013-01-12 22:47:51

标签: iphone objective-c ipad statusbar

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

感谢。

1 个答案:

答案 0 :(得分: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