我已经设置了一个新的iPad项目,只支持UIInterfaceOrientationLandscapeRight。
在我的App Delegate中,我将一个RootViewController添加到窗口的rootViewController。
在这个UIViewController(RootViewController)中,我有以下内容:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
我也尝试过:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
但是,当我根据视图控制器视图的尺寸创建和添加子视图时,我无法为我的应用获取正确的尺寸。
如果我为视图控制器输出self.view.frame,我会得到{{0, 0}, {768, 1024}}
,但我希望{1024,768}。如果我不能在何时尺寸正确,那么我可以用它们来创建我的观点吗?
对不起,如果这被问了十亿次,我已经浏览了很多SO问题,但没有解决我的问题。
答案 0 :(得分:5)
我遇到了同样的问题,Ash Furrow上面说的似乎是正确的; viewDidLoad
被调用后,方向设置为。
我正在创建一个适用于所有方向的iPad应用程序,但只有纵向方向在我的根UIViewController中正确设置。为了在横向上正确地进行视图布局,我必须确保所有子视图上的自动调整遮罩都设置为允许视图在显示给用户之前调整为幕后景观。
例如,我有一个与UIViewController的UIView大小相同的UIImageView。为了在旋转到横向时正确调整它:
UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
backgroundImageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);
[self.view addSubview:backgroundImageView];
现在可以在viewDidLoad
方法中以纵向方式配置UIViewController,并在显示给用户之前很好地旋转到纵向方向。
答案 1 :(得分:1)
看起来viewDidLoad
p (UIInterfaceOrientation)[self interfaceOrientation]
(UIInterfaceOrientation) $1 = UIInterfaceOrientationLandscapeRight
这是我的理论:默认情况下,iPad上的接口是1024x768,如果它有状态栏,那就是你的。我相信,即使界面方向正确,它也不会在viewDidLoad
之后更新视图几何体。我相信这有很好的理由。
如果查看UIViewController
Life Cycle文档,则viewDidLoad
作为视图控制器设置的一部分进行调用。 在加载视图后,调用willAnimateRotationToInterfaceOrientation: duration:
让视图控制器知道它的几何图形正在发生变化。
这不是一个解释的答案。希望这将帮助您构建解决方案以解决此问题。
在项目的info.plist
中,打开“支持的界面方向”选项,然后删除您不想支持的界面方向。默认情况下,所有都受支持:
应该清除它。
答案 2 :(得分:0)
我有一个简单的解决方案:Apple默认应用模板适用于主视图控制器的XIB。要解决您的问题,只需打开主视图控制器XIB并将方向设置为“横向”。
因为我通常不使用XIB并以编程方式创建所有UI元素。这就是为什么我在之前的项目中遇到了同样的问题,这真的让我发疯了。然后,我通过对帧宽和硬编码进行硬编码来解决它。身高价值 - 不是很好的方式。