2010-10-25 77 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]; 
    }