Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在设备处于纵向时获取UINavigationBar横向高度_Ios_Uinavigationbar_Orientation_Uiinterfaceorientation_Landscape Portrait - Fatal编程技术网

Ios 在设备处于纵向时获取UINavigationBar横向高度

Ios 在设备处于纵向时获取UINavigationBar横向高度,ios,uinavigationbar,orientation,uiinterfaceorientation,landscape-portrait,Ios,Uinavigationbar,Orientation,Uiinterfaceorientation,Landscape Portrait,我有一个简单的问题:当我的设备处于纵向时,我想找出横向中UINavigationBar的高度。这可能吗?如果可能,如何实现 一些背景: UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectZero]; [navBar sizeToFit]; NSLog(@"navBar: %@", NSStringFromCGRect(navBar.frame)); 这将返回当前设备方向的正确高度,例如44。这意味着U

我有一个简单的问题:当我的设备处于纵向时,我想找出横向中
UINavigationBar
的高度。这可能吗?如果可能,如何实现

一些背景:

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

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

这将返回当前设备方向的正确高度,例如
44
。这意味着
UINavigationBar
sizeToFit
方法必须以某种方式查看当前设备的方向。有没有办法不去景观就知道景观中的高度是多少?

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

换句话说,在你真正改变方向之前不要担心


好的,这是一个可行的解决方案:

@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

知道你为什么需要知道这些会有帮助吗?@maddy这是一个理论问题。基本上,我只是想知道这是否可能。@rmaddy我也需要确切的东西。在我的例子中,我实现了一个定制的
navigationItem.titleview
,它需要针对不同的
navigationBar
大小(方向)进行不同的配置
WillAnimateRotationInterfaceOrientation:duration
已被弃用,
ViewWillTransitionOnSize:withTransitionCoordinator:
显示旧方向的大小,而不是即将到来的方向。。你能为这个简单的目的提供一个想法吗?那不行。在
WillAnimateRotationInterfaceOrientation
中查询高度可以得到纵向高度,因为它是在旋转和后续高度更改发生之前调用的。从Apple文档:调用此方法时,interfaceOrientation属性已经设置为新方向,并且视图的边界已更改。这样,您就可以用这种方法执行视图所需的任何附加布局。啊!我的错!你是对的!我在想Will Rotateto。。。但仍然需要触发实际的旋转。我想知道如何在没有任何旋转的情况下从肖像画开始。