도래울

UITableView Section 헤더 고정 방지 본문

개발/iOS

UITableView Section 헤더 고정 방지

도래울 2016. 4. 26. 13:47

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);
    }
}


'개발 > iOS' 카테고리의 다른 글

UIScrollview 페이징 처리  (0) 2016.04.27
UITableView에서 header와 footer 사용 하기  (0) 2016.04.26
UIScrollview Delegate 종류  (0) 2016.04.22
swift ActionSheet 예제  (0) 2016.04.21
swift UITableView 예제  (0) 2016.04.21
Comments