1

我在navigationController內有UITableViewController。當我滾動tableView時,我的代碼隱藏了navigationBar(將其frame.origin.y設置爲負值,從而將其發送到屏幕外)。 navigationBar已成功隱藏,但當我通過點按主頁按鈕離開應用程序,然後將應用程序啓動到前臺時,導航欄返回frame.origin位於(20, 0)(x = 20,因爲狀態欄可見)以及tableView被推送向下(屏幕上有frame.origin回到(64, 0))。隱藏的NavigationBar在應用程序進入前臺後重新顯示

任何有關如何防止navigationBar重新出現在應用程序進入前臺的想法將不勝感激。

+0

你可以請你在這裏發佈你的代碼嗎? – Mohit

回答

0

我想你沒有選擇隱藏navigationBar的最佳做法,因爲大多數「內部視圖」都是由它的superview automaticaly定位的。問題是,當你滾動時,navigationBar被移出屏幕......但是當應用程序進入前景時,所有視圖都被佈置(checkout UIView setNeedsLayout和layoutSubviews),並且這會將novigationBar移回到它所在的位置(y = 0)。可以使用的其他選項有:

1)在viewWillAppear:和viewWillDisappear:中使用UINavigationController的setNavigationBarHidden :(動畫:)。這裏更多信息SO: how to hide navigationbar when i push from navigation controller?

2)如果你要離開的導航欄後面的空間使用(在viewDidLoad中或從#1)方法:

self.navigationController.navigationBar.alpha = 0; 

3)移動你的代碼中的方法viewDidLayoutSubviews設定框你的控制器(iOS 5+)。每次在UITableViewControler中滾動layoutSubviews方法時(和viewDidLayoutSubviews也一樣)。但我不會推薦這個解決方案。

+0

有時我們需要自定義動畫,在這種情況下,setNavigationBarHidden:animated:不提供這樣做的功能 –

0

您可以使用下面的代碼隱藏導航欄,而不是設置框架。

[self.navigationController setNavigationBarHidden:YES]; 

希望這會對你有幫助。快樂編碼:)

相關問題