UITableView에 대한 사용자 정의 헤더가 필요한 상황 에서이 동작을 에뮬레이션하려고했습니다. 페이지의 다른 여러 항목 아래에 있고 섹션 헤더가 기본 "도킹"동작을 따르기를 원했기 때문에 내 "탐색"막대를 굴 렸습니다. UITableView / UIScrollView를 Facebook / Instagram / Chrome / etc와 비슷한 스타일로 다른 객체와 함께 UITableView / UIScrollView를 조정하는 매우 영리하고 간결한 방법을 찾았습니다. 앱.
내 .xib 파일에서 자유 구성 요소 뷰에 내 구성 요소를로드했습니다. http://imgur.com/0z9yebJ (죄송합니다.
왼쪽 사이드 바에서 테이블은 기본 헤더보기 뒤에 정렬됩니다. 스크린 샷에서 알 수는 없지만 기본 헤더보기와 동일한 y 위치도 있습니다. UITableView의 contentInset 속성은 보이지 않게 확장되므로 76 (메인 헤더 뷰의 높이)으로 설정됩니다.
UIScrollView와 함께 메인 헤더 뷰를 슬라이드 업하기 위해 UIScrollViewDelegate의 scrollViewDidScroll 메소드를 사용하여 계산을 수행하고 UIScrollView의 contentInset과 메인 헤더 뷰의 프레임을 변경합니다.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
UIEdgeInsets insets = scrollView.contentInset;
//tableViewInsetDelta and tableViewOriginalInsetValue are NSInteger variables that I set to 0 and 76, respectively, in viewDidLoad
tableViewInsetDelta = tableViewOriginalInsetValue + scrollView.contentOffset.y;
insets.top = tableViewOriginalInsetValue - tableViewInsetDelta;
if (scrollView.contentOffset.y > -76 && scrollView.contentOffset.y < 0) {
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, 44 - tableViewInsetDelta, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
} else if (scrollView.contentOffset.y > 0) {
insets.top = 0;
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, -32, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
} else if (scrollView.contentOffset.y < -76) {
insets.top = 76;
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, 44, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
}
}
첫 번째 if 문은 대부분의 무거운 작업을 수행하지만 사용자가 강제로 끌고 scrollViewDidScroll에 전송 된 초기 contentOffset 값이 첫 번째 if 문 범위를 벗어난 상황을 처리하기 위해 다른 두 개를 포함해야했습니다 .
궁극적으로 이것은 나를 위해 정말 잘 작동합니다. 부풀어 오른 하위 클래스로 프로젝트를로드하는 것을 싫어합니다. 이것이 성능면에서 최상의 솔루션인지 여부에 대해 말할 수는 없습니다 (항상 호출되기 때문에 scrollViewDidScroll에 코드를 넣는 것을 주저했습니다).하지만 코드 풋 프린트는 내가 본 것 중 가장 작습니다 이 문제에 대한 해결책이며 UIScrollView에 UITableView를 중첩시키지 않아도됩니다 (Apple은 문서 및 터치 이벤트에서 UITableView에서 약간 펑키하게 만듭니다). 이것이 누군가를 돕기를 바랍니다!