작성
·
254
0
테이블뷰를 코드로 설계하는 중에,
테이블뷰의 위치와 크기를 뷰 전체에 넣을려고 했는데,
오토레이아웃 말고
tableView.frame =view.bounds 이렇게해도 되더라구요
그래서 찾아보니까
frame은 superView를 기준으로 자기 위치 (origin)과 크기 (size)를 나타내느데
여기에 bounds를 대입한다? bounds는 자기를 기준으로 하는 위치와 크기잖아요?
그럼 tableView의 frame에 bounds를 대입한다는 것은 앞으로 tableView의 frame은 bounds와 같이 동작한다? 이렇게 이해하면 되나요?
좀 더 찾아보니까 bounds는 viewPort 같은거라고 하더라구요 화면을 바라보는 창문? 그럼 tableView.frame = view.bounds는 tableView의 frame의 위치와 크기에 view를 바라보는 전체 크기? 위치?를 대입한다?
이게 무슨 뜻인지 알려주세요~
답변 1
0
네 안녕하세요 듀듀 님.
화면을 배치하는 방식에는
(1) 아주 예전부터 사용하던 프레임 방식이 있었고,
(첫 아이폰 출시 화면 크기.. 화면 크기 고정된 방식에서 화면 설계 유용)
(중간에 또 다른 방식도 존재하기는 했었긴 한데 중요하지는 않고요)
(2) 첫 아이폰이 출시한 이후에 화면크기가 다변화 되면서..
여러크기의 화면에도 화면을 배치하는 방법이 필요해져서 오토레이아웃이 등장했습니다.
오토레이아웃의 경우 뷰 끼리의 위치를 잡으면, 알아서 크기를 계산 / 조정해 주는 방식이라 엄청 편해졌죠.
(참고로 활용 앱 28강 내용에서 설명드렸는데, 지금쯤 다시 보시면 이해가 되실 것 같긴해요.)
뷰를 위치시킬때 프레임방식도 여전히 사용 가능하고, 오토레이아웃도 가능합니다. (다만, 일반적으로 통일해서 배치해야 겠죠.)
무튼 질문의 내용은
tableView.frame =view.bounds 이 코드가 무엇을 의미하느냐? 의 내용이신데
테이블뷰.frame (위치 + 크기) = 데이터값
(오른쪽에 있는 데이터값을 왼쪽의 속성에다가 할당 한다는 내용은 당연히 아실테니)
여기서 왼쪽에 할당하고 싶은 오른쪽의 데이터 값은.. 여기에서는 위치 + 크기의 데이터가 필요합니다.
그런데, view.bounds라고 한번 viewDidLoad 같은 곳에서 출력을 해보셔도 되는데,
(예시: print(self.view.bounds) )
bounds라는 정보는 듀듀님이 직접 말씀하셨듯이 "자기를 기준으로 하는 위치와 크기" 정보 입니다.
자기 기준의 위치는 무조건 0, 0 (영 컴마 영)이 시작점이고, 크기는 view의 크기 이겠죠.
그리고 여기서 view의 크기는 기본 뷰컨트롤러가 가진 self.view (기본뷰)의 크기 입니다.
(따라서 쉽게 말씀드리면... 현재 화면에서 듀듀님이 보시는 기기 화면의 크기를 의미합니다.)
결국
tableView.frame = view.bounds
코드의 경우, 0, 0 (영컴마 영)의 위치를 시작점(위치)으로 기본 뷰컨트롤러가 가진 self.view (기본뷰)의 크기 만큼(크기)으로 테이블뷰의 크기를 잡아라 라는 의미를 가지고 있는 것입니다.
그리고 이런 방식의 프레임을 통한 뷰의 배치 코드는...
일반적으로 화면 전체를 차지하게 되는 "테이블뷰"나 "컬렉션뷰".. 등.. 굳이 4개의 오토레이아웃을 잡는 것보다 한줄의 코드를 통한 뷰의 배치가 더 편할때 (오토레이아웃 대신) 많이 사용하는 방법입니다.
감사합니다. :)
오우 답변감사합니다.