【问题标题】:iPhone: Move UINavigationBar down?iPhone:向下移动 UINavigationBar?
【发布时间】:2011-04-30 11:54:25
【问题描述】:

我正在尝试将导航栏定位在屏幕顶部下方。

我在viewWillAppear 中尝试过以下操作:

self.navigationController.view.frame = CGRectMake(0.0, 54.0, 320.0, 426.0);
self.navigationController.navigationBar.frame = CGRectMake(0.0, 0.0, 320.0, 44.0);

问题是它似乎只在第一次显示视图时起作用。如果您转到另一个选项卡并返回,导航栏位于屏幕顶部。当 iPhone 旋转时也会发生这种情况。

我应该尝试调整导航控制器框架,还是应该尝试将导航控制器添加到屏幕顶部下方的另一个视图?

【问题讨论】:

  • 使用 Interface Builder 来做这件事怎么样?看来我可以在导航栏中拖动到视图中的任何位置。不过,我不确定是否可以将导航控制器挂接到此。
  • 如果我在 IB 中使用 UINavigationController,它只会把它放在视图的顶部。来自 UINavigationController 类参考:@property(nonatomic, readonly) UINavigationBar *navigationBar 讨论 允许修改导航栏的 barStyle 或半透明属性,但绝不能直接更改其框架、边界或 alpha 值。要显示或隐藏导航栏,您应该始终通过导航控制器更改其 navigationBarHidden 属性或调用 setNavigationBarHidden:animated: 方法。
  • 我最终使用 Interface Builder 在标签栏控制器中设置了一个带有图像的视图和一个带有导航控制器的导航栏。现在,当我在代码中推送另一个视图时,我错过了图像和导航栏。
  • 在xibs中,根视图实际上并没有图片或导航栏,我要推送的视图也是如此。

标签: iphone uinavigationcontroller uinavigationbar


【解决方案1】:

虽然晚了,但我希望这仍然可以帮助其他人。我在 viewDidAppear:animated 中使用了 Stephens 代码,导航栏在返回选项卡时保持不变。这使我可以在导航栏上方使用徽标。我在 viewController 中使用了它。

    - (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.view.frame = CGRectMake(0.0, 100.0, 320.0, 426.0); 
self.navigationController.navigationBar.frame = CGRectMake(0.0, 0.0, 320.0, 44.0); 
[self loadData];
    }

【讨论】:

    【解决方案2】:

    我可以通过覆盖自定义导航控制器的 viewDidAppear 中的 frame 属性来更改框架。我还将导航控制器视图添加到作为窗口子视图的另一个视图并进行相同的剪辑。请注意,因为通过这种方式,您将放弃对将附加到导航控制器的每个视图控制器的标准调用。我不记得我是否还为我的视图控制器使用了自定义视图:也许是的,并且覆盖了 didMoveToSuperview 或 didMoveToWindow 只是为了模拟默认行为。希望它有所帮助并原谅我的英语。

    【讨论】:

    • 如果这对您有用,您应该展示示例。你的英语很好。如果你付出更多的努力,你的答案并没有多大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多