Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Objective c 显示导航栏时,视图中将显示正确的self.view.frame_Objective C_Ios_Cocoa Touch_Uinavigationcontroller - Fatal编程技术网

Objective c 显示导航栏时,视图中将显示正确的self.view.frame

Objective c 显示导航栏时,视图中将显示正确的self.view.frame,objective-c,ios,cocoa-touch,uinavigationcontroller,Objective C,Ios,Cocoa Touch,Uinavigationcontroller,我正在父视图控制器中显示navigationBar: - (void)viewWillDisappear:(BOOL)animated { [self.navigationController setNavigationBarHidden:NO animated:YES]; [super viewWillDisappear:animated]; } 然后,在下一个视图控制器中 - (void)viewDidLoad { /* ... */ NSLog(@"%i,

我正在父视图控制器中显示
navigationBar

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    [super viewWillDisappear:animated];
}
然后,在下一个视图控制器中

- (void)viewDidLoad
{
    /* ... */
    NSLog(@"%i, %g", self.navigationController.navigationBarHidden,
            self.view.frame.size.height);
}

- (void)viewWillAppear:(BOOL)animated
{
    /* ... */
    [super viewWillAppear:animated];
    NSLog(@"%i, %g", self.navigationController.navigationBarHidden, 
            self.view.frame.size.height);
}

- (void)viewWillLayoutSubviews
{
    NSLog(@"%i, %g", self.navigationController.navigationBarHidden, 
            self.view.frame.size.height);
}

- (void)viewDidAppear:(BOOL)animated
{
    NSLog(@"%i, %g", self.navigationController.navigationBarHidden, 
            self.view.frame.size.height);
}
产出:

-[viewDidLoad]: 1, 416
-[viewWillAppear:]: 0, 460
-[viewWillLayoutSubviews]: 0, 416
-[viewDidAppear:]: 0, 416

如您所见,视图将出现出错
self.view.frame.size.height
。可以使用
viewWillLayoutSubviews
,但它是在iOS5中引入的。是否有可能在VIEWWILLEXPEND中获得适当的帧高度?

以下是我迄今为止得到的最佳解决方案:

- (void)viewWillAppear:(BOOL)animated
{
    /* recalculate frame size */
    CGSize size = [UIScreen mainScreen].bounds.size;
    UIApplication *application = [UIApplication sharedApplication];
    if (UIInterfaceOrientationIsLandscape(application.statusBarOrientation))
        size = CGSizeMake(size.height, size.width);
    if (!application.statusBarHidden)
        size.height -= MIN(application.statusBarFrame.size.width,
                           application.statusBarFrame.size.height);

    CGRect frame = self.view.frame;
    frame.size.height = size.height -
                        self.navigationController.navigationBar.frame.size.height;
    self.view.frame = frame;

    /* ... */
}
为什么460错了?480-20(状态栏高度)=460抱歉,我正在显示导航栏;)