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