UITableView를 사용하다 보면 테이블을 Section별로 나눠 사용해야 할 필요가있다.
테이블 타입이 Group이 아닌 Plain타입일 경우 Section의 타이틀을 지정할 경우 스크롤시 헤더가 고정되는 현상을 일으킨다.
하지만 고정이 아닌 스크롤과 동시에 사라지게 하기 위해서는 다음과 같은 코드를 추가하면 해결할수 있다.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// 각 세션의 헤더가 스크롤시 고정되있는 현상을 수정하기 위해 위치를 재조정하는 코드 추가
CGFloat sectionHeaderHeight = self.tableView.sectionHeaderHeight;
if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
} else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
테이블뷰는 UIScrollView를 상속받아 구현되어있기 때문에 위와 같은 메소드를 오버라이드해서 구현이 가능하다.
위 코드를 삽입하게 되면 Section의 고정현상이 사라지게 된다.
추가로 Footer뷰를 사용하기 위해서는 아래와 같은 방식을 적용하였다.
CGFloat footerHeight = self.clearAllView.bounds.size.height;
CGFloat height = scrollView.frame.size.height;
CGFloat contentYoffset = scrollView.contentOffset.y;
CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset - footerHeight;
if(distanceFromBottom < height )
{
CGFloat diff = footerHeight - (height - distanceFromBottom);
if(diff >= 0 && diff <= footerHeight){
scrollView.contentInset = UIEdgeInsetsMake(0, 0, -diff, 0);
}
}else{
scrollView.contentInset = UIEdgeInsetsMake(0, 0, -footerHeight, 0);
}
}
'iOS' 카테고리의 다른 글
하위 UIView위 특정 위치를 상위 UIView에서 좌표 얻어오기 (0) | 2012.05.17 |
---|---|
이벤트로 UIView 크기 변경하기 (0) | 2012.05.15 |
IOS 설정바로가기 URL (0) | 2012.04.19 |
UIDocumentInteractionController을 통한 앱간 문서 전달 (0) | 2012.04.09 |
UIActionSheet 버튼 타이틀 동적 추가 (0) | 2012.04.05 |