2013-01-12 51 views
0

我一直在使用下面的方法来获取状态栏高度。不过,我需要获取视图加载时的高度,以便相应地调整我的tableview的高度。在viewDidLoad中使用这种方法返回0.状态栏高度viewDidLoad

我已经尝试在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; 
} 

谢谢。

回答

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