【问题标题】:iPad/iPod: autoRotate resizes view in windowiPad/iPod:自动旋转调整窗口中的视图大小
【发布时间】:2010-05-26 18:19:59
【问题描述】:

在开发 iPad 界面时,我有一个 UIViewController 管理视图,该视图直接作为主 UIWindow 的子视图放置。

在放入 UIWindow 之前,该视图会被调整为非标准尺寸,例如 768x460,并位于屏幕底部。

当旋转设备时,UIViewController 的 autoRotate 特性会导致视图被调整大小以填充整个 UIWindow 空间。

我认为这可能是因为在 XIB 中,视图设置为窗口大小,但是当我将其更改为反映所需大小时,它仍然将其扩展为窗口大小。

然后我进入MainWindow XIB并关闭autoresizeSubviews,它仍然发生。

这是一个非常令人沮丧的问题,我希望只是我遗漏了一些明显的东西。

有人有什么好主意吗?

请求代码:

browseController = [[BrowseController alloc] initWithNibName:@"BrowseController" bundle:nil];

[[browseController view] setFrame:CGRectMake(0, 544, 768, 460)];

[window addSubview:[browseController view]];

【问题讨论】:

  • 能否贴出如何添加到窗口的代码?
  • 我添加了它......不过没什么特别的。我根据需要设置框架,当它旋转时,这些数字被丢弃并重新绘制框架。

标签: iphone uikit ipad uiviewcontroller


【解决方案1】:

如果您在界面生成器中,请在编辑视图时单击尺寸选项卡。在“自动调整大小”下单击所有红色箭头,使它们消失。你不希望那里有任何红色箭头。或者在代码中您可以执行以下操作:

browseController.autoresizingMask = UIViewAutoresizingNone;

【讨论】:

    【解决方案2】:

    弹簧和支柱呢? (又名 autoresizingMask)见here。在代码中你可能需要额外的一行

    [[browseController view] setAutoresizingMask:UIViewAutoresizingNone];
    

    【讨论】:

      【解决方案3】:

      您的问题中没有足够的信息,但这通常是问题所在(所以我做出有根据的猜测):

      Apple 声明只有一个 UIView 应该存在于根级别的 UIWindow 中 - 如果有多个,则很多行为是未定义的。通常会有一个额外的你没有注意到/几周前就忘记了。

      在实践中,我发现当有“多个”时,会出现很多这样的旋转错误,Apple 的代码会出现混乱,并开始随机重新定位。

      标准解决方法:

      1. 在您制作的每个应用中
      2. ...始终有一个空的“MyRootViewController”,您可以将其添加到 UIWindow
      3. ...然后在其中添加尽可能多的视图作为子视图

      (因为 Apple 的奇怪错误只会影响 UIWindow 本身 ​​- 所有子视图都“按预期”工作)

      【讨论】:

        【解决方案4】:

        我刚刚遇到了这个问题,我是这样解决的:

        确保您已为要附加到窗口顶层的视图定义了视图控制器。如果你不这样做,布局会让你发疯。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-29
          • 2012-01-06
          • 2017-03-12
          • 1970-01-01
          • 2011-03-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多