2011-05-26 52 views
6

我在根視圖控制器中使用下面的代碼來隱藏UITableView的標題(標題中有一個UISearchbar)。它在應用程序啓動並顯示tableView時起作用。然而,之後,當選擇一行時,會推送詳細視圖,並且用戶彈出詳細視圖,則uitableview頭現在可以在根視圖中顯示,而不是我所期望的。iOS UITableView contentOffSet不再隱藏從推送的詳細視圖返回的標題

這裏的相關功能:

- (void) viewWillAppear:(BOOL)animated { 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
    [super viewWillAppear:animated]; 
    self.tableView.contentOffset 
    = CGPointMake(0, self.tableView.tableHeaderView.frame.size.height); 
    //it's as if the line above is ignored on when returning from a pushed detail view  
} 

- (void) viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    // theContentOffSet works when I put it hear, but then the user can see it which is not desired  
} 

線 '[self.navigationController setNavigationBarHidden:YES動畫:動畫];'肯定是問題的一部分,因爲沒有它,代碼工作,並且tableView標題滾動出視圖。然而,對根視圖的要求是要隱藏導航欄,但在詳細視圖中顯示。

回答

16

環顧四周後,我找到了以下帖子https://devforums.apple.com/message/315519#315519解決了這個問題。

-(void)viewWillAppear:(BOOL)animated 
{ 
    [self performSelector:@selector(updateContentOffset) withObject:nil afterDelay:0.0]; 
} 

- (void)updateContentOffset 
{ 
    self.tableView.contentOffset = CGPointMake(0, savedContentOffsetY); 
} 

當然,在viewWillDisappear您可將內容保存如下補償:

savedContentOffsetY = self.tableView.contentOffset.y; 

而在你viewDidLoad

savedContentOffsetY = self.tableView.tableHeaderView.frame.size.height; 
+1

你對viewDidLoad的代碼行應該是'savedContentOffsetY',對嗎? 否則這段代碼看起來不錯,我會盡快接受它作爲答案。 – kris 2011-06-15 13:53:40

+0

好找,堪察加。看起來像'performSelector'使您能夠利用viewWillAppear的動畫來解決一些時間挑戰。 – kris 2011-06-16 13:41:42

+0

感謝您接收錯字,現在修復。 – Kamchatka 2011-06-18 22:54:00

1

我有搜索和嘗試了很多,但沒有幫助。最後下面的代碼幫了我。你可以在你的代碼中添加viewDidLoad()方法:

self.edgesForExtendedLayout = UIRectEdgeNone;