2012-04-18 50 views
0

我在我的表的標題視圖中有一個UISearchBar。每當動畫出現時,例如當刪除或插入行時,標題視圖向下滾動。有沒有辦法告訴表視圖,它不應該(自動)向下滾動標題視圖? (只有用戶應該能夠將其滑下。)如何防止滾動我的TableHeaderView行動畫?

回答

0

在Google上進行大量搜索後& StackOverFlow找到正確的線索:UIScrollViewChange 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,這使得這些方法可用並且執行所有魔術。

幾句話來解釋contentOffsetcontentInset,這花了我一段時間才明白它們的含義。

  • 偏移量是一個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)。

我希望有幫助。 :)