代码之家  ›  专栏  ›  技术社区  ›  Boon

iPhone应用程序处于横向模式,但视图的边界仍然是纵向的。

  •  6
  • Boon  · 技术社区  · 15 年前

    当您将手机方向设置为横向模式时,场景背后到底发生了什么?当我描绘出主屏幕的边界和任何子视图的边界时,宽度和高度仍然是320x480,而不是480x320。

    你知道为什么吗?

    6 回复  |  直到 13 年前
        1
  •  1
  •   Leo    15 年前

    您检查的是边界属性还是框架属性?某些控件,尤其是填充屏幕的ui视图,似乎在任何方向上都保持相同的框架;我认为AppKit设置了其转换属性以旋转其内容。

    您可能会发现Bounds属性的值大部分时间都是您所期望的,但Frame属性没有。

        2
  •  1
  •   jstevenco    14 年前

    这是一个大主题,但我将添加相当于0.02的内容;注释仅限于纵向和横向之间的更改;即,不是颠倒、面朝上、面朝下和未知的内容。

    1. 如果视图没有侦听方向更改,则无论方向如何,框架和边界都将保持不变。

    2. 如果视图已注册为侦听方向更改,则 界限可能 更改;即,在“横向”中,整个屏幕框架为<320480>,而边界为<480320>。这假定:

      a.您使用的是带有适当的Yes返回值的shouldAutorotateToInterfaceOrientation回调,或者

      b.在通知中心显式注册以侦听uideviceorientationdidchangenotification。

    3. 方法2a只适用于属于应用程序窗口根视图控制器的视图;也就是说,首先添加视图的视图控制器。方法2b可与仿射变换和 手册 边界更改以获得不受自动旋转控制的视图的正确方向布局。

        3
  •  1
  •   mmopy    14 年前

    我发现,如果您不使用uinavigationcontroller,您的视图可能会出现问题,因为没有给出正确的视图和帧边界。

    我直接将视图添加到uiwindow中,正好遇到了这个问题。但当我将uinavigationcontroller夹在uiwindow和uiviews之间时,问题就消失了。

    希望有所帮助

        4
  •  0
  •   luvieere    15 年前

    是的,框架和边界保持不变,您应该检查ViewController的InterfaceOrientation属性,并相应地处理宽度和高度(如果您的布局具体取决于这些)。

        5
  •  0
  •   Mr.Wizard naktepe    13 年前

    我现在对iPad应用程序也有同样的问题。

    我通过查询视图“解决”了它 interfaceOrientation 如果两者都是 UIDeviceOrientationPortrait UIDeviceOrientationPortraitUpsideDown 然后我在视图中手动设置子层的框架(这是一个 CAGradientLayer )。

        6
  •  0
  •   Boon    13 年前

    发现了这个问题——为什么旋转后边界仍然相同的原因是因为旋转后唯一受影响的是视图的变换属性。

    快速跟踪视图的转换可以得到:

    2012-01-31 12:19:02.114 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationPortrait
    2012-01-31 12:19:02.116 TestScollviewRotation[9834:207] 0.000000 -1.000000 1.000000 0.000000
    
    2012-01-31 12:21:41.898 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationPortraitUpsideDown
    2012-01-31 12:21:41.898 TestScollviewRotation[9834:207] 0.000000 1.000000 -1.000000 0.000000
    
    2012-01-31 12:21:58.780 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationLandscapeRight
    2012-01-31 12:21:58.780 TestScollviewRotation[9834:207] 1.000000 0.000000 -0.000000 1.000000
    
    2012-01-31 12:19:03.181 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationLandscapeLeft
    2012-01-31 12:19:03.181 TestScollviewRotation[9834:207] 1.000000 0.000000 -0.000000 1.000000