2012-04-18 2 views
0

내 테이블의 헤더보기에 UISearchBar가 있습니다. 애니메이션이 발생할 때마다 (예 : 행을 삭제하거나 삽입 할 때 헤더보기가 아래로 스크롤됩니다. 테이블 뷰에 헤더 뷰를 (자동으로) 스크롤해서는 안된다는 것을 알 수있는 방법이 있습니까? (사용자 만이 그것을 아래로 내릴 수 있어야합니다.)행 애니메이션이 내 TableHeaderView를 스크롤하지 못하게하려면 어떻게해야합니까?

답변

0

& StackOverFlow에서 광범위한 검색을 한 후에 나는 UIScrollView이라는 단서를 발견했습니다. 나는 해결책을 조금 사용자 정의

Change Default Scrolling Behavior of UITableView Section Header는 다음과 같은 특성을 가지고 :

  • 행 애니메이션 테이블 뷰를 아래로 스크롤 할 수 있습니다 드디어 구현을 찾고 있었다 실제 솔루션은 또 다른 질문에서 찾을 수 있습니다 헤더 뷰
  • 위에 클릭을 표시하지 않는 한 헤더 뷰는 그 자체를 밀어한다 부분적 보이면 헤더보기
  • 제외 가기 테이블 뷰를 스크롤한다 ("위로 스크롤") 아래로 완전히 볼 수 있습니다.
  • 이 솔루션 617,451,515,

코드 :

- (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]; 
    } 
} 

이 코드 UITableView위한 대리인 역할을하는하는 UITableViewController 안에 구현된다. 다른 쪽의 UITableViewUIScrollView에서 상속받습니다.이 방법을 사용하면 모든 마법을 수행 할 수 있습니다.

contentOffsetcontentInset을 설명하는 문장이 몇 개 있는데, 그 의미를 이해하는 데 다소 시간이 걸렸습니다. 오프셋

  • 단순히, 즉 테이블 뷰 & 셀 섹션, 왼쪽 상단에서 아래로 스크롤하는 방법을 지금까지 표시되는 콘텐츠 지시하는 CGPoint이다. 머리글보기와 바닥 글보기가 포함되어 있으므로 오프셋 (0, 0)은 테이블보기가 맨 위로 스크롤된다는 것을 나타냅니다. 오프셋 (0, 100)은 테이블 뷰가 100 픽셀 아래로 스크롤된다는 것을 의미합니다 (포인트의 x 값은 일반적으로 사용되지 않습니다).
  • 삽입은 매우 흥미로운 속성이며 UIScrollView의 경계를 quadrupel (top, left, bottom, right)으로 정의합니다. 따라서 이러한 경계를 넘으면 테이블보기가 튀어 나옵니다. 기본값은 (0, 0, 0, 0)입니다. 첫 번째/마지막 셀 위/아래로 스크롤하면 테이블 뷰가 바운스됩니다. 따라서 (-44, 0, 0, 0)의 값은 바운스 경계를 ​​표보기의 원점보다 44 픽셀 아래로 낮 춥니 다. 내 머리글보기가 44 픽셀이기 때문에 머리글보기를 화면의 보이는 부분으로 스크롤 할 때마다 바운스됩니다. 이것은 또한 행 애니메이션이 (44, 0)의 오프셋 아래로 테이블을 밀어 내지 못하게하고 "slide to top"명령은 테이블 뷰를 (44, 0)의 오프셋으로 슬라이드시킵니다.

도움이 되었기를 바랍니다. :)

관련 문제