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。。。但仍然需要触发实际的旋转。我想知道如何在没有任何旋转的情况下从肖像画开始。