我有一个简单的问题:我希望在我的设备处于人像状态时找出景观中UINavigationBar
的高度。这是可能的,如果是的话,怎么样?
一些背景知识:
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectZero];
[navBar sizeToFit];
NSLog(@"navBar: %@", NSStringFromCGRect(navBar.frame));
这会返回当前设备方向的正确高度 ,例如44
。这意味着UINavigationBar
的{{1}}方法必须以某种方式查看当前的设备方向。有没有什么方法可以在不去景观的情况下找出景观中的高度?
答案 0 :(得分:2)
为什么不在willAnimateRotationToInterfaceOrientation中抓取并设置该信息。通过重写此方法,您应该能够在显示视图之前获得所需的信息。
换句话说,在您实际上正在改变方向之前,不要担心它。
答案 1 :(得分:0)
好的,这是一种可行的解决方案:
@interface TestVC : UIViewController
@property (assign, nonatomic) UIInterfaceOrientationMask orientationMask;
@end
@implementation TestVC
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return _orientationMask;
}
@end
@implementation ViewController
- (IBAction)getNavigationBarHeight:(id)sender {
TestVC *vc = [[TestVC alloc] init];
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
vc.orientationMask = UIInterfaceOrientationMaskLandscapeLeft;
} else {
vc.orientationMask = UIInterfaceOrientationMaskPortrait;
}
[self presentViewController:vc animated:NO completion:^{
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectZero];
[navBar sizeToFit];
NSLog(@"navBar frame in 'opposite' orientation: %@", NSStringFromCGRect(navBar.frame));
}];
[self dismissViewControllerAnimated:NO completion:nil];
}
@end