【问题标题】:Customizing UIModalViewController Size and Having a Navigation Bar自定义 UIModalViewController 大小并拥有导航栏
【发布时间】:2011-07-05 00:34:32
【问题描述】:

我创建了自己的ProfileUIViewController 类,即UINavigationControllerDelegate。我以两种方式显示此视图:

  1. 来自 A-UIViewController.m 内的 IBAction,作为 UIModalViewControllerA-UIViewController 加载时有一个UINavigationBar,但是当我显示模式时,它不再有导航栏。

  2. 通过单击B-UIViewController.m 中的表格单元格行,将其推入堆栈。 B-UIViewController 在加载时有一个UINavigationBarProfileViewController 会根据需要保留导航栏:)

我要做的是在案例 1 中将视图作为模式加载时保留 UINavigationBar,填充在 UINavigationBar 内部而不是覆盖整个视图。 (即,我希望模态显示在导航栏下方的 A-UIViewConroller 内 - 使其尺寸更小)

有人可以帮我解决这个问题吗?我是否需要创建自己的自定义 ModalViewController 类 - 这不是 ProfileUIViewController 吗?它是否需要一些我没有提供的实例方法?任何方向都会很棒:)

【问题讨论】:

    标签: iphone xcode uiviewcontroller modalviewcontroller


    【解决方案1】:

    导航栏由导航控制器管理,而不是由您的视图控制器管理。当您将视图控制器推入导航控制器时,导航控制器使用 navigationItem 中的信息来确定在导航栏中放置什么。但是当您以模态方式显示视图控制器时,它不在任何导航控制器内,因此没有栏。

    模态案例的一个简单解决方案是创建一个新的 UINavigationController,并将您的视图控制器作为其根视图控制器,并以模态方式显示它,而不是直接显示您的视图控制器。

    【讨论】:

    • 我想为我的情况创建新的UINavigationController INSIDE A-UIViewController 吗?将新navigationController的根viewController设为A-UIViewController,然后以模态方式显示UINavController?也许我错过了什么。
    • 你可能有类似[self presentModalViewController:profileController animated:YES]的东西。将其更改为UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:profile] autorelease]; [self presentModalViewController:nav animated:YES];
    • 失常 - 谢谢!这至少让我在顶部有一个工作导航栏。我感到困惑的原因是我已经打电话给[self.navigationController presentModalViewController:profileVC animated:YES]。我真正想要的是在A-UIViewController 中显示的当前导航栏下方显示的模式,而不是创建一个全新的导航栏。
    • 为什么不直接压栈呢?模态显示视图控制器的目的是暂时用新界面替换当前界面,而不是保留旧界面的一部分。
    • 是的。我考虑过这一点,但我不希望视图以正常方式推送到堆栈上。如果我推,它只会滑到新视图;我可以自定义规范以使其显示类似于模态吗?
    猜你喜欢
    • 2022-07-18
    • 1970-01-01
    • 2012-03-12
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多