【问题标题】:Does UIViewController or UINavigationController set the size of it's view?UIViewController 或 UINavigationController 是否设置其视图的大小?
【发布时间】:2011-12-10 09:46:06
【问题描述】:

我有几个 UIViewController,通过 UINavigationController 加载,我在其中覆盖 loadView,并设置要显示的自定义视图。我在设置某些子视图的框架时遇到问题,也许是视图本身。我认为 UINavigationController 或 UIViewController 都能够在显示时强制其视图填满屏幕。

我想知道是否和/或何时设置视图的大小。如果发生这种情况,是设置视图的框架,还是以其他方式进行。

谢谢。

更新: 我刚刚注意到,在处理这个问题时,我使用这个 loadView 方法制作了一个新的 UINavigationController:

- (void)loadView
{
  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 10.0f, 10.0f)];
  [view setBackgroundColor:[UIColor redColor]];
  self.view = view;
  [view release];
}

我看到一个红色的视图占据了整个屏幕,除了状态栏和标题。我的视图何时调整大小以填满屏幕?创建视图时应该使用什么尺寸?

【问题讨论】:

    标签: iphone ios uiview uiviewcontroller uinavigationcontroller


    【解决方案1】:

    UIViewControllers 的框架空间变小了,因为UINavigationController 通过添加一个大小为 44.0f 的UINavigationBar 来操纵视图。

    它会调整大小,因为您将视图替换为self.view = view; 如果您使用addSubview:,它会保持原来的大小。 logancautrell 解释了何时以及为什么。

    【讨论】:

    • 感谢您的澄清。在视图控制器 loadView 中加载我的视图时,当通过 UINavigationController 推送时,我是否只需将框架设置为 CGRectMake(0.0、0.0、320.0、416.0)?因为我不需要在 UINavigationBar 或状态栏的框架原点 y 坐标中进行补偿?
    • NavBar 的底部成为视图控制器的新 X,Y 原点,您只需要补偿调整后的高度。为了确保尺寸使用NSLog(@"w x h = %f x %f",self.view.frame.size.width, self.view.frame.size.height);
    • 谢谢,这让我明白了。我仍然想知道视图何时更改。因为即使我在 loadView 中设置了不正确的大小,它也会被更改为正确的大小。我会接受你的回答,因为它让我前进。再次感谢。
    • 在这里调整大小:self.view = view;
    • 如果你会使用:[self.view addSubview:view];它不会调整大小
    【解决方案2】:

    UINavigationController 会在推送时自动调整 ViewController 的视图大小。来自文档:

    pushViewController:动画:

    viewController 参数中的对象成为导航堆栈上的顶部视图控制器。推送视图控制器会导致显示它管理的视图。该视图的显示方式由动画参数决定。如果动画参数为 YES,则视图动画到位;否则,视图只是显示在适当的位置。在显示之前,视图会自动调整大小以适应导航栏和工具栏(如果存在)。

    如果您想显示一个较小的视图,那么您必须创建一个容器并使其成为您的 VC 视图的子视图,手动设置大小。可能必须正确设置自动调整大小掩码,具体取决于您创建视图的方式。

    【讨论】:

    • 谢谢,这一定是我读过一次的文档,但我忘记了我读的是什么/在哪里读的。
    • 有没有办法强制导航控制器在推送操作后重新调整其子视图控制器的大小?我正在更改导航控制器的高度,但由于某种原因它不会自动调整其内容。
    • 我还看到了一个问题,即当您在过渡期间旋转设备时,导航控制器没有调整其子视图控制器的大小。
    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多