代码之家  ›  专栏  ›  技术社区  ›  Jonathan.

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

  •  8
  • Jonathan.  · 技术社区  · 14 年前

    这只是一个测试应用程序,只有一个AppDelegate类来创建我所做的一切就是创建一个基于窗口的应用程序,在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;
    }
    

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

    win 768.000000 - 1024.000000
    

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

    苹果似乎真的搞砸了界面轮换,因为我除了问题什么都没有,我不记得iPhone上发生过什么,所以请有人告诉我如何解决这个问题。

    我会给500个名声(这只是我的10个名声)的人谁至少可以解释为什么会发生这种情况,并希望提供一个解决方案。

    7 回复  |  直到 14 年前
        1
  •  17
  •   Tim Isganitis    14 年前

    我认为 "Launching in Landscape Mode" iOS Application Programming Guide

    iOS中的应用程序通常在 匹配方向的纵向模式 两个纵向运行的应用程序 和横向模式,您的应用程序 应始终以纵向模式启动 控制器将接口旋转为 方向。如果应用程序运行 不过,仅在横向模式下 让它在一个环境中启动 初始方向:

    • 添加UIInterfaceOrientation键和 将其值设置为横向模式。 将此键的值设置为 UIInterfaceOrientationLandscapeRight接口。

    • 确保他们的自动调整 选项设置正确。

    • 覆盖视图控制器 方法并返回YES 所需的景观方向和否 用于纵向。

    重要: 前面的步骤假设 管理其视图层次结构。查看 控制器提供了一个重要的 处理的基础设施数量 方向变化和其他 应用程序未使用视图 控制器可能与 你负责的申请 调整图形命令)作为 需要在中显示内容 横向模式。

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

    目前还不清楚你想用你真正的应用来完成什么,但推荐的做法是将你的视图按纵向排列,然后设置它们的自动调整大小属性来处理自动旋转(无论是在应用程序启动后立即还是以后)。

        2
  •  10
  •   Deniz Mert Edincik    14 年前

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

    UIAlertView使用UIApplication的 状态定向 属性来选择警报的方向。

    // 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;
    

    从SDK头部可以看到,statusBarOrientation不会自动更改。因此,您或UIViewController(自动旋转)应该更改此属性。

    如果启动纵向(与UIWindow的默认方向一致),并使用 应自动旋转指针面方向 让UIViewController来处理旋转,它会改变UIApplication的 状态定向

    但如果您以横向模式启动,则应手动设置 状态定向 就一次。

        3
  •  6
  •   tadejsv    14 年前

    使用视图的边界

        4
  •  4
  •   tadejsv    14 年前

    但是对它的看法会给出正确的测量(关于方向),所以一定要使用那些。

        5
  •  3
  •   Nimrod    14 年前

    尝试设置而不是手动修改状态栏 UISupportedInterfaceOrientations UIInterfaceOrientationLandscapeLeft

    手动设置状态栏方向有点“低级”。视图控制器也需要返回 UIInterfaceOrientationLandscapeLeft接口 shouldAutorotateToInterfaceOrientation 实例方法。

        6
  •  3
  •   ImHuntingWabbits    14 年前

    • 在Info.plist中,确保具有以下参数:
      • 初始界面方向=横向(右主页按钮)
        • 项目0=横向(右主页按钮)
        • 项目1=横向(左主页按钮)
    • 添加一个基于xib的视图控制器,其中的视图可以自动调整大小(消除大小调整问题等)

    向应用程序委派添加一点代码:

    _rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
    _navigationController = [[UINavigationController alloc] initWithRootViewController:self.launcherViewController];
    [window addSubview:self.navigationController.view]; //I think this is the key.
    [window makeKeyAndVisible];
    

    我想关键是视图,我试过不用它,在iPhone上它运行得很好,在iPad上,尽管正如你说的那样,警报以纵向模式出现。当我将视图添加回所需的横向模式下显示的警报时。

        7
  •  0
  •   sjngm quinti    13 年前

    我什么都没有,只是硬编码我的应用程序到景观只有模式的问题。很多时候没有视觉问题,但在底部20像素的按钮无法选择。我在我的主UIWindow上做了一个cliptobunds,并在它的层上添加了一个边框,我可以看到UIWindow在状态栏下。我尝试将我的UIWindow的x偏移量更改为20(UIWindow仍为纵向,其内容为横向),但这意味着我的uicontroller向下移动了20像素(不知道为什么)。虽然这是一个不同的问题,你的我也发现了同样的问题,因为边界和帧打印时似乎是正确的。

    总之,我将我的plist从uiInterfaceOrientationAndscapeLeft更改为uiInterfaceOrientationAndscapeRight,还将我的UIViewController方法更改为:

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    {
      return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }
    

    如果这能解决你的问题,告诉我