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뷰를 사용하기 위해서는 아래와 같은 방식을 적용하였다.

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
   
    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);
    }
}

+ Recent posts