0
我在我的表的標題視圖中有一個UISearchBar。每當動畫出現時,例如當刪除或插入行時,標題視圖向下滾動。有沒有辦法告訴表視圖,它不應該(自動)向下滾動標題視圖? (只有用戶應該能夠將其滑下。)如何防止滾動我的TableHeaderView行動畫?
我在我的表的標題視圖中有一個UISearchBar。每當動畫出現時,例如當刪除或插入行時,標題視圖向下滾動。有沒有辦法告訴表視圖,它不應該(自動)向下滾動標題視圖? (只有用戶應該能夠將其滑下。)如何防止滾動我的TableHeaderView行動畫?
在Google上進行大量搜索後& StackOverFlow找到正確的線索:UIScrollView
。 Change Default Scrolling Behavior of UITableView Section Header
我定製的解決方案一點點,具有以下特性:
代碼此解決方案:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat searchBarHeight = self.searchBar.frame.size.height;
if (scrollView.contentOffset.y >= searchBarHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-searchBarHeight, 0, 0, 0);
} else {
scrollView.contentInset = UIEdgeInsetsZero;
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (scrollView.contentOffset.y < self.searchBar.frame.size.height && scrollView.contentOffset.y > 0) {
[scrollView setContentOffset:CGPointZero animated:YES];
}
}
此代碼是一個UITableViewController
內實現,其充當用於UITableView
委託。另一方面的UITableView
繼承自UIScrollView
,這使得這些方法可用並且執行所有魔術。
幾句話來解釋contentOffset
和contentInset
,這花了我一段時間才明白它們的含義。
CGPoint
,它只是告訴多遠可見內容,即,部分表格視圖&細胞,從左上角向下滾動。包含標題視圖和頁腳視圖,因此偏移量(0,0)表示表視圖滾動到頂部。偏移量(0,100)意味着表格視圖向下滾動100px(通常不使用該點的x值)。UIScrollView
的邊界定義爲四極杆(top, left, bottom, right)
。因此,如果跨越這些邊界,表格視圖將會反彈。默認值是(0,0,0,0),這意味着如果您在第一個/最後一個單元格上方/下方滾動,表格視圖將會反彈。因此,值(-44,0,0,0)會將反彈邊界降低到低於表視圖原點44px。由於我的標題視圖高度爲44px,因此每次將標題視圖滾動到屏幕的可見部分時都會反彈。這也會阻止行動畫將表格滑動到(44,0)的偏移量之下,並且「滑動到頂部」命令會將表格視圖滑動到偏移量(44,0)。我希望有幫助。 :)