2012-11-01 53 views
4

我想要得到這樣的行爲: 我有一個UISearchBar,它是我的tableview的表頭視圖。滾動表格時,搜索欄確實會移動,但如果您在表格邊界之上滾動,搜索欄將永不停止觸摸導航欄。鎖定UISearchBar到UITableView的頂部

我找到了一個很好的答案在這裏 - Locking a UISearchBar to the top of a UITableView like Game Center 但它不是在iOS 6中的作品 - 用表視圖幀標題上的操作不起作用

什麼可以這樣做的原因是什麼?

回答

7

我發現了一個解決方案,適用於iOS 6,下

做的UITableView的子類,覆蓋layoutSubviews方法

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    CGRect rect = self.tableHeaderView.frame; 
    rect.origin.y = MIN(0, self.contentOffset.y); 
    self.tableHeaderView.frame = rect; 
} 
+0

非常感謝!替換scrollViewDidScroll中的欄不起作用,但這沒有把戲:) – sachadso

1

如果您使用以下命令:

[_tableView setTableHeaderView:_searchBar]; 

滾動時超出了第一行表視圖,搜索欄也應該消失,而不是堅持到視圖的頂部。

沒有看到你的代碼,我只能假設你可能已經添加了UISearchBar作爲你的部分頭部而不是表頭部?

+0

謝謝,但那不是我正在尋找。我也使用setTableHeaderView方法,但是我想改變TableHeaderView的行爲(我在iOS 5.x上做了一些) - 它應該與所有表格內容一起滾動(這是默認行爲),正如你所說的那樣,但應該保持在頂部如果你在界限之上滾動。 http://i.stack.imgur.com/w2sVr.jpg - 這張圖解釋得更好(我想和Game Center一樣) – KaterinaPetrova

1

,由於iOS6的SDK沒有更新滾動時,也許同樣的優化。因此需要在滾動時調用tableview layoutSubviews。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    UISearchBar *searchBar = searchDisplayController.searchBar; 
    CGRect rect = searchBar.frame; 
    rect.origin.y = MIN(0, scrollView.contentOffset.y); 
    [scrollView layoutSubviews]; 
    searchBar.frame = rect; 
} 
+0

我有同樣的問題。我曾經在iOS5中使用類似的代碼(沒有layoutSubviews),但是沒有在iOS6中運行。添加layoutSubviews代碼修復了問題。 – Clinemi

+0

這樣做似乎會導致搜索欄失去觸摸事件。相反,掩蓋的tableview單元格被調用。任何人看到這個? – dnstevenson