【问题标题】:Change UIViewController self.view frame更改 UIViewController self.view 框架
【发布时间】:2012-05-03 10:01:57
【问题描述】:

我正在尝试显示 viewController xib 视图,其视图显示在固定标题横幅 (0,0,320,44) 下,这是添加到应用程序窗口的 imageView。

这是因为当我导航多个视图控制器时,我需要它贴在屏幕上。这是我正在做的项目的要求。

到目前为止我已经尝试过:

  • 将 XIB 视图的大小调整为适当的帧大小 (0,0,320,416),同时使用点表示法和设置器。

  • 使用 self.view.frame = CGRectMake(0, 44, 320, 416); 更改 viewDidLoad 中的框架;

但它不起作用。有什么建议吗?

【问题讨论】:

  • 为什么要在应用程序窗口中添加图像视图。您可以在 viewController xib 中添加它。
  • @Mudit:当我导航多个视图控制器时,我需要它贴在屏幕上。这是我正在做的项目的要求。
  • 你有理由使用多个视图控制器吗?在我看来,您只需要多个视图。在任何情况下,您都可以保留默认的全屏视图控制器视图并在标题横幅下方添加子视图。在只有 1 个视图控制器的情况下,工作量比多个视图控制器要少。
  • @Matic 你是对的,但我想使用 xibs,我不想在运行时从 bundle 中加载 xibs,这就是我选择这种方式的原因。否则,你是完全正确的,我本来可以只使用以编程方式构建的视图,并且调整大小会更容易。

标签: objective-c ios uiview uiviewcontroller


【解决方案1】:

viewWillAppear中设置框架

- (void)viewWillAppear:(BOOL)animated
{
     self.view.frame = CGRectMake(0, 44, 320, 416);
    [super viewWillAppear:animated];
}

【讨论】:

  • 是的,这行得通!谢谢,但为什么呢?框架还没有在 viewDidLoad 中绘制?只是想更好地理解,并且也希望不必在每次视图出现时都绘制这个。
  • 我相信 self.view.frame 在 vi​​ewDidLoad 结束时(从 iOS 端)被覆盖,就在 viewWillAppear 调用之前。
  • 看来也比较重要的还是在[super viewWillAppear];之前设置frame
  • 救了我的命!谢谢!
  • 这对我不起作用!在 viewDidLoad 中,框架没有改变
【解决方案2】:

只是想补充一点。更改 UIViewController 视图的原因在 viewDidLoad 中不起作用是因为调用 [window makeKeyAndVisible],通常在您的 viewDidLoad 之后调用。此调用将更改window.rootViewController 的框架以等于窗口的框架。您可以通过在[window makeKeyAndVisible] 之后更改 UIViewController 的 view.frame 来测试这一点,并且更改将保持不变。

viewWillAppearviewDidAppear[window makeKeyAndVisible] 中被调用,但在视图的框架被调整大小之后。

需要注意的是,只有最顶层的控制器 rootViewController 会自动更改其视图的框架。这不会影响附加到rootViewController 的任何childViewControllers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 2011-08-04
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多