2010-11-25 129 views
6

我已閱讀過多篇文章,但它對我來說工作不正常。我正在使用最新的4.2 SDK。在導航控制器中默認隱藏UITableView搜索欄

我的代碼是

self.tableView.contentOffset = CGPointMake(0.0, 44.0); 

這部分工作,其移動搜索欄了一點點,但是它不會完全隱藏。我已經嘗試將值增加到更大的值,並且這沒有影響到什麼!我在表的視圖控制器的viewDidLoad方法中調用此代碼。有沒有人有任何想法?

+0

你能解釋你如何擺脫你的tableview嗎? – 2010-11-25 03:12:54

+0

我想看看`wantsFullScreenLayout`。如果底部有一個酒吧,它將覆蓋桌面的一部分,您可以添加一個footerview 44px高(快速且簡單),或者您可以將tableview放置到一個父視圖中(稍微多點工作,但乾淨一點)。 – 2010-11-25 03:17:24

回答

14
self.tableView.contentOffset = CGPointMake(0.0, 44.0); 

上面的代碼是實際可行的,但它需要的UITableView創建完所有的細胞後運行。我想這是另一個問題,但。

+1

你是如何確定tableview已經完成創建所有單元格的?你能給我一些線索嗎?謝謝! – Brian 2015-06-05 08:55:52

24

另一種方法應該是...在viewDidLoad中調用:

self.tableView.contentInset = UIEdgeInsetsMake(-self.searchDisplayController.searchBar.frame.size.height, 0, 0, 0); 

和實施endDragging委託方法:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ 
    CGPoint offset = self.tableView.contentOffset; 

    CGFloat barHeight = self.searchDisplayController.searchBar.frame.size.height; 
    if (offset.y <= barHeight/2.0f) { 
     self.tableView.contentInset = UIEdgeInsetsZero; 
    } else { 
     self.tableView.contentInset = UIEdgeInsetsMake(-barHeight, 0, 0, 0); 
    } 

    self.tableView.contentOffset = offset; 
} 

設置的內容是刪除一些 「閃爍」

如果還你想要搜索欄堅持在頂部,執行didScroll這樣:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    CGRect sbFrame = self.searchDisplayController.searchBar.frame; 
    sbFrame.origin.y = self.tableView.contentOffset.y; 
    if (sbFrame.origin.y > 0) { 
     sbFrame.origin.y = 0; 
    } 
    self.searchDisplayController.searchBar.frame = sbFrame; 
} 

我希望這會有所幫助(帶我幾天弄清楚:))

乾杯!

UPDATE:

由於@carbonr指出你應該在viewDidLoad中添加此行是因爲iOS7 +

self.edgesForExtendedLayout = UIRectEdgeNone; 
4

您可以設置內部viewDidLoad表視圖的初始範圍,因此搜索欄出現隱藏在開始。

你必須創建searchBar屬性,然後使用下面的代碼:

- (void)viewDidLoad 
{ 
    //... 
    CGRect bounds = self.tableView.bounds; 
    bounds.origin.y = self.tableView.bounds.origin.y + searchBar.bounds.size.height; 
    self.tableView.bounds = bounds; 
    //... 
} 
-1

我也有像你一樣的問題。下面的代碼解決了我的problem.Please添加代碼在你viewDidLoad中():

self.edgesForExtendedLayout = UIRectEdgeNone; 

N:B:我在項目中使用的autoLayout。

0

對於其他人仍在尋找更新的解決方案,您可以通過here查看我的答案。

基本上你需要更新contentOffset第一次調用viewDidLayoutSubviews