5

我有一个简单的问题:当我的设备处于纵向状态时,我想查找横向UINavigationBar的高度。这是可能的,如果是这样,如何?获取UINavigationBar横向高度,同时设备处于纵向状态

一些背景资料:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectZero]; 
[navBar sizeToFit]; 

NSLog(@"navBar: %@", NSStringFromCGRect(navBar.frame)); 

这返回当前设备取向正确的高度,例如44。这意味着UINavigationBarsizeToFit方法必须以某种方式查看当前的设备方向。有没有什么办法可以找到什么样的高度会是在风景上不会风景?

+0

这将有助于了解为什么你需要知道这一点? – rmaddy 2014-09-10 20:03:08

+0

@maddy这是一个理论问题。我基本上只是想知道是否有可能。 – 2014-09-10 20:06:49

+0

@rmaddy我也需要确切的东西。在我的例子中,我实现了一个自定义的'navigationItem.titleview',它需要针对不同的'navigationBar'大小(方向)进行不同的配置。 'willAnimateRotationToInterfaceOrientation:duration'不推荐使用,'viewWillTransitionToSize:withTransitionCoordinator:'显示旧的方向尺寸不是即将到来的尺寸..你能为这个简单的目的提供一个想法吗? – aytunch 2015-07-30 17:13:06

回答

0

OK,这是一个可能的解决方案,它的工作原理:

@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 
2

为什么不在willAnimateRotationToInterfaceOrientation中获取并设置该信息。通过重写此方法,您应该能够在显示视图之前获取所需的信息。

换句话说,除非您真的在改变方向,否则不要担心。

willAnimateRotationToInterfaceOrientation

+0

这不起作用。在'willAnimateRotationToInterfaceOrientation'中查询高度为您提供纵向高度,因为它在**旋转和随后的高度更改发生之前称为**。 – 2014-09-10 20:19:37

+1

从Apple文档:调用此方法时,interfaceOrientation属性已被设置为新的方向,并且视图的边界已被更改。因此,您可以在此方法中执行视图所需的任何其他布局。 – Wizkid 2014-09-10 20:26:24

+0

啊!我的错!你是对的!我正在考虑willRotateTo ...但是仍然需要触发实际轮换。我想知道如何从肖像中完成而没有任何旋转。 – 2014-09-10 20:27:54

相关问题