2015년 iOS 9에서 처음으로 등장, Stack View는 오토레이아웃을 편리하게 사용하도록 도와주기 위해 만들어졌습니다.
스택 뷰는 자동 레이아웃을 사용하여 정렬된 뷰의 위치와 크기를 조정합니다. 스택 뷰는 첫 번째와 마지막으로 정렬된 뷰를 스택 축을 따라 해당 가장자리에 정렬합니다. 수평 스택에서 이는 첫 번째로 정렬된 뷰의 앞쪽 가장자리가 스택의 앞쪽 가장자리에 고정되고 마지막으로 정렬된 뷰의 뒤쪽 가장자리가 스택의 뒤쪽 가장자리에 고정됨을 의미합니다. 수직 스택에서는 위쪽 및 아래쪽 가장자리가 각각 스택의 위쪽 및 아래쪽 가장자리에 고정됩니다.
UIView의 인스턴스 프로퍼티로
open var frame: CGRect
open var bounds: CGRect
CGRect: 사각형의 위치와 크기를 포함하는 구조체.
Frame: SuperView(상위뷰)의 좌표 시스템안에서 View의 위치와 크기를 나타냅니다.
frame의 핵심 -> SuperView(상위뷰) (상위뷰라는 것은 한단계 상위뷰를 의미)
frame은 뷰의 크기와 부모 뷰(Superview) 기준의 상대적 위치를 나타냅니다. 예를 들어, 뷰의 frame이 (x: 50, y: 50, width: 100, height: 100)이라면, 뷰의 왼쪽 상단 모서리는 부모 뷰의 왼쪽 상단 모서리로부터 오른쪽으로 50포인트, 아래로 50포인트 떨어져 있으며, 뷰의 너비는 100포인트, 높이는 100포인트라는 것을 의미합니다.
Bounds : View의 위치와 크기를 자신만의 좌표 시스템안에서 나타냅니다.
Bounds의 핵심 -> 자신만의 좌표 시스템
bounds는 뷰의 크기와 자신의 좌표계에서의 위치를 나타냅니다. bounds의 x와 y 좌표는 뷰의 내부에서의 위치를 나타내고, 이는 보통 뷰의 왼쪽 상단 모서리를 기준으로 합니다. 따라서 대부분의 경우 bounds의 x와 y는 0입니다. bounds의 width와 height는 frame의 width와 height와 같습니다.
간단히 말해서, frame은 부모 뷰에 대한 상대적 위치와 크기를, bounds는 자신의 좌표계에 대한 위치와 크기를 나타냅니다. 뷰가 회전하거나 스케일이 변경되면 frame은 변경되지만, bounds는 변하지 않습니다.
Frame을 사용하는 경우와 Bounds를 사용하는 경우 각각 어떤 상황에서 유용하게 적용될 수 있을까요?
Frame과 Bounds를 혼동하지 않고 사용하기 위한 개발 팁이 있다면 어떤 것이 있을까요?