2010-10-25 61 views
1

我试图将导航栏放置在屏幕顶部的下方。iPhone:将UINavigationBar向下移动?

我试过在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旋转时也会发生这种情况。

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

+0

如何使用Interface Builder来做到这一点?我似乎可以将导航栏拖到视图中的任何位置。我不确定是否可以将导航控制器挂钩。 – 2010-11-02 21:12:52

+0

如果我在IB中使用UINavigationController,它只会将它放在视图的顶部。 从UINavigationController的类参考: @property(非原子,只读)UINavigationBar的*的导航栏 讨论 是允许的修改barStyle或导航栏的半透明特性,但必须从未直接改变它的帧,界限或阿尔法值。要显示或隐藏导航栏,您应该始终通过导航控制器更改其navigationBarHidden属性或调用setNavigationBarHidden:animated:方法来完成此操作。 – 2010-11-02 21:15:20

+0

我最终使用界面生成器来设置带有图像的视图,并在选项卡栏控制器中使用导航控制器导航栏。现在,当我在代码中推入另一个视图时,我错过了图像和导航栏。 – 2010-11-04 02:26:14

回答

-1

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

+0

你应该显示例子,如果这为你工作。你的英语很好。如果你付出更多的努力,你的答案不会有太大的帮助。 – jungledev 2015-12-16 20:05:01

2

虽然晚了,但我希望这仍然可以帮助别人。我在viewDidAppear中使用了斯蒂芬斯代码:动画,并且导航栏在返回到选项卡时保持放置状态。这使我可以在导航栏上方使用徽标。我在我的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]; 
    }