티스토리 뷰

UITableView 가 있으면 , 위로 잡아땡겨서 Cell들에 내용을 추가시켜주고 싶은경우 ,


우선 위로 잡아땡겨서 TableView의 마지막 Cell이 나올 때를 캐치해야한다. 


이때, 2가지방법이 있는데 난 tableView delegate함수를 사용하였다.



1. scrollview delegate 함수


    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {

        // 마지막 셀일때 다시 통신 해서 값 받아와야한다.

        let height = scrollView.frame.size.height

        let contentYoffset = scrollView.contentOffset.y

        let distanceFromBottom = scrollView.contentSize.height - contentYoffset

        if distanceFromBottom < height {

            //업데이트하고싶은 action 구현

        }

    }

}





2. tableview delegate 함수


    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

        

        if indexPath.row + 1 == 나타내는 아이템 배열.count {


            print("you reached end of the table")


        }


    }



이 delegate 함수를 선언하면 지금 있는 셀의 갯수 보다 하나 많을 때,  이 함수가 불리게 되는데


print 문 이 들어있는 부분에 원하는 실행 내용을 작성해주면 된다. 


그런데 여기서 셀들을 추가시켜주면 원하는대로 실행은 되지만 


uitableviews.reloaddata()를 실행하게 되면 , Cell들이 반씩 올라가서 보이기 때문에 유저가 불편한 문제점들이 발생하였다. 


이를 해결하기 위해 


    var heightAtIndexPath = NSMutableDictionary()  



를 선언해준다음 viewDidLoad() 함수에는 아래의 내용을 선언해준다.




        addressTableView.rowHeight = UITableViewAutomaticDimension

이런식으로 rowHeight 를 AutoDemension으로 설정해준다음 



    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {

        if let height = heightAtIndexPath.object(forKey: indexPath) as? NSNumber {

            return CGFloat(height.floatValue)

        } else {

            return UITableViewAutomaticDimension

        }

    }


이 Delegate 함수를 구현한다.  

그리고 위의 willDisplay delegate 함수에 


        let height = NSNumber(value: Float(cell.frame.size.height))

        heightAtIndexPath.setObject(height, forKey: indexPath as NSCopying)


를 추가시켜주면 끝.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday