iPhone(/ iPad)上的高度和宽度

Jon*_*an. 8 iphone interface objective-c uiwindow ipad

这只是一个测试应用程序,只有一个AppDelegate类来创建我所做的就是创建一个基于Window的应用程序,将支持的方向设置为仅在info.plist中的格局,然后添加以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
[application setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];

// Override point for customization after application launch.
UIAlertView *test = [[UIAlertView alloc] initWithTitle:@"hu" message:@"hui" delegate:nil cancelButtonTitle:@"hi" otherButtonTitles:nil];
[test show];
[window makeKeyAndVisible];
    NSLog(@"win %f - %f", window.bounds.size.width, window.bounds.size.height);
return YES;
}
Run Code Online (Sandbox Code Playgroud)

如果没有设置状态栏方向的第一行,即使界面的其余部分处于横向左侧,警报视图也会以纵向显示.

无论如何,Log仍然给出了这个:

win 768.000000 - 1024.000000
Run Code Online (Sandbox Code Playgroud)

这是错误的方式(因此当我在我的真实应用程序中添加子视图时,框架不正确)

苹果似乎已经在界面旋转方面变得非常糟糕,因为我只有问题,我不记得在iPhone上发生过这种情况,所以请有人告诉我如何解决这个问题.

我会给那些能够至少解释为什么会发生这种情况并希望提供解决方案的人提供500点声誉(这几乎不是我的声誉).

Tim*_*tis 17

我认为,"在横向模式下启动"的的的iOS应用程序编程指南主要介绍的是与你的测试程序发生的事情:

iOS中的应用程序通常以纵向模式启动,以匹配主屏幕的方向.如果您的应用程序在纵向和横向模式下运行,则应用程序应始终以纵向模式启动,然后让其视图控制器根据设备的方向根据需要旋转界面.但是,如果您的应用程序仅以横向模式运行,则必须执行以下步骤以使其最初以横向方向启动:

  • 在应用程序的Info.plist文件中,添加UIInterfaceOrientation键并将其值设置为横向模式.对于横向方向,您可以将此键的值设置为UIInterfaceOrientationLandscapeLeft或UIInterfaceOrientationLandscapeRight.

  • 在横向模式下布置视图,并确保正确设置其自动调整大小选项.

  • 覆盖视图控制器的shouldAutorotateToInterfaceOrientation:方法,仅针对所需的横向方向返回YES,针对纵向方向返回NO.

要点:前面的步骤假定您的应用程序使用视图控制器来管理其视图层次结构.视图控制器为处理方向更改以及其他复杂的视图相关事件提供了大量基础结构.如果您的应用程序没有使用视图控制器 - 可能是游戏和其他基于OpenGL ES的应用程序的情况 - 您负责根据需要旋转绘图表面(或调整绘图命令)以横向模式显示内容.

就您的测试应用而言,关键部分是最后一部分.您没有视图控制器,因此您完全有责任按照您想要的方向设置UI.这就是您必须手动设置状态栏方向的原因.

我读了第一段,说iOS应用程序总是以纵向模式启动,然后根视图控制器旋转其视图以立即匹配设备方向,并且一旦添加到窗口就没有动画.这意味着UIWindow本身不会旋转,所以它的尺寸将始终是纵向方向(如tadej5553所说).此外,所有UIWindow子视图的帧也将是纵向方向(因为帧始终在父视图的坐标中定义).因此,无论您如何旋转设备,根视图控制器的框架始终都是纵向方向.但是,由于视图的bounds属性是根据其自己的坐标定义的,因此该高度和宽度应反映视图的当前方向.

目前尚不清楚您要使用真实应用程序完成什么,但推荐的做法是为纵向布局您的视图,然后设置其自动调整属性以处理自动旋转(无论是在应用程序启动后还是稍后发生) .


Den*_*cik 10

UIWindow对旋转一无所知.旋转方法封装在UIViewController中.(自动轮换等)

UIAlertView使用UIApplication的statusBarOrientation属性来选择警报的方向.

// Rotate to a specific orientation.  This only rotates the status bar and updates the statusBarOrientation property.
// This does not change automatically if the device changes orientation.
@property(nonatomic) UIInterfaceOrientation statusBarOrientation;
Run Code Online (Sandbox Code Playgroud)

从SDK标头中可以看出,statusBarOrientation不会自动更改.因此,您或UIViewController(自动旋转)应该更改此属性.

如果您启动portrait(与UIWindow的默认方向一致),并使用shouldAutorotateToInterfaceOrientation并让UIViewController处理旋转,它会在每次设备方向更改时更改UIApplication的statusBarOrientation.

但是如果以横向模式启动,则应手动将statusBarOrientation设置为一次.

希望这可以帮助.


tad*_*jsv 6

使用视图的边界