3

这是肖像:

替代文字

这是风景

替代文字

我已经尝试过轮换但没有成功:

self.tableView.autoresizesSubviews = YES;
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
4

8 回答 8

13

我最近遇到了这个问题。就我而言,这是因为我正在执行不是应用程序窗口根控制器的导航控制器的旋转。因此,我使用旋转通知侦听器/仿射变换/边界调整方法来更改导航控制器的布局。这一切正常,但产生了这里描述的结果。我花了一段时间才注意到,当我旋转到横向时,导航栏的高度没有正确调整大小(即,从 44 像素到 32 像素,框架在横向模式下的高度降低了)。我的应用程序的根视图控制器响应willRotateToInterfaceOrientationdidRotateFromInterfaceOrientation, 然而。该视图控制器也已经知道关联的导航控制器。我通过将以下代码添加到willRotateToInterfaceOrientation方法来解决问题:

CGRect frame = self.navViewController.navigationBar.frame;
if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    frame.size.height = 44;
} else {
    frame.size.height = 32;
}
self.navViewController.navigationBar.frame = frame;

希望这可以在类似情况下节省一些时间。

于 2010-05-19T17:19:48.617 回答
7

当使用自定义视图控制器作为根管理其他视图控制器时,它负责将所有旋转事件转发到当前活动的子控制器(如果我可以这样称呼它)。这些事件是:

– willRotateToInterfaceOrientation:duration:

– willAnimateRotationToInterfaceOrientation:duration:

– didRotateFromInterfaceOrientation:

– willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:

– didAnimateFirstHalfOfRotationToInterfaceOrientation:

– willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

因此,对于由您的自定义根控制器管理的导航控制器,转发– willAnimateRotationToInterfaceOrientation:duration:到导航控制器可以解决旋转时导航栏高度错误的问题。

于 2011-11-02T09:21:43.777 回答
6

在 didRotateFromInterfaceOrientation 方法中添加以下行。

[self.navigationController.view layoutSubviews];

我希望这会做到。

于 2012-03-30T12:31:53.430 回答
2

我有完全相同的问题,@jstevenco 让我找到了一个非常奇怪的解决方案。我的视图也会在旋转时自动调整大小,但 tableview 似乎不明白那里有一个导航控制器:

在 tableviewcontroller 中,添加以下内容:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
 CGRect frame = navBar.frame;
if (fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    frame.size.height = 31.9;
} else {
    frame.size.height = 44.1;
}
navBar.frame = frame;  

}

奇怪的是31.9和44.1很重要!留下这些是 32 和 44,没有调整大小,所以它似乎忽略它。为我工作,希望对其他人有所帮助。

于 2011-12-10T13:54:09.820 回答
0

我看起来在方向更改后表格视图向下滚动了一点。

您是否尝试过调用scrollToRowAtIndexPath:atScrollPosition:animated:并滚动到最顶行?

于 2009-12-10T16:30:34.823 回答
0

如果您在导航控制器中调用了“willAnimateRotationToInterfaceOrientation:”,但忘记从方法中调用 super,则可能会出现此问题。

你应该有这样的东西:

        - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
        [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation];
// Your code here

    }
于 2010-04-08T17:35:23.233 回答
0

当设备方向发生变化时,您UINavigationController需要得到通知。view如果您仅将a添加UINavigationController到 another ,则不会发生这种情况UIView

从 iOS 5 开始,您可以简单地调用addChildViewController:parent UIViewController,这将确保方向更改传播到此子视图控制器。

于 2013-03-21T09:44:03.970 回答
0

在这些情况下要注意的一件事是如果您手动更改状态栏的方向。如果状态栏未隐藏并且您在状态栏处于错误方向时更改了视图的框架(在您的代码中,您可能在框架更改后立即更新状态栏的方向),它将自动即使您没有启用自动调整大小,也会错误地调整导航栏的大小。

于 2011-02-18T04:55:36.323 回答