강의를 듣다가 스크롤 뷰 위에 스택 뷰를 얹고
priority
를 1000
에서 250
으로 낮추는 내용이 나왔다.
해당 부분인데, 이렇게 하면 유연성이 높아져서.. 스크롤이 잘 된다라고 하시며
부연설명도 해주셨지만 좀처럼 이해가 되지 않았다.
오늘 마무리 시간에 팀원들과 데일리스크럼 시간을 통해 질문도 해보고
팀원들이 말해준 내용으로 얼추 이해는 되었지만,
그래도 이 부분 때문에 강의가 막혔으니 이걸 뚫으려면 적고 가야할 것 같다.
음 쉽게 말해 제약 조건의 중요도를 설정하는 속성 이라고 한다.
내용을 번역해보니,
와 어렵다.. 번역을 해도 이해가 안된다.
그래서 정말 구글 검색을 제일 다양하게 해본 날인 듯 싶다.
그렇게 하여 알아낸 것,
priority
는 제약 조건이 충돌하게 될 때, 어떤 제약 조건이 우선 적용될지를 의미한다고 한다.
오늘의 예시에서는 스크롤뷰에서의 priority
를 낮추는 작업을 진행했지만,
앱을 만들면서 라벨간의 간격조정을 하거나 Text
의 양이 많아져서
다른 레이아웃에 침범하게 될 경우를 대비하는 작업을 할 때도
priority
로 제약을 걸어줘야 서로 침범하지 않는다고 한다.
스크롤이 유연해지는 이유는 스택 뷰가 스크롤 뷰의 크기에 맞게
자유롭게 늘어나거나 줄어들 수 있기 때문이다.
만약 priority
를 기본값인 1000
으로 설정하게 될 경우,
"이 크기는 절대 변하지 않아야 해!!" 라며 강하게 고정하는 것과 같다고 보면 된다.
이렇게 되면.. 스크롤 뷰가 스택 뷰의 크기를 변화시키지 못하다보니
그 제약으로 인해 화면 크기에 따라
스택뷰의 내용이 다 표시되지 않고 잘려서 보이는 현상이 생기거나
스크롤이 잘 안되는 상황이 생길 수 있는 것이다.
그 때!!
스택 뷰의 priority
를 250
으로 낮추면,
스택 뷰의 크기가 스크롤 뷰의 요구에 따라 조금씩 변할 수 있다.
스크롤 뷰가 필요에 따라 스택 뷰의 크기를 조정하면서
스크롤을 매끄럽게 하도록 허용해주는 것이다.
앞서 말했듯이 주로 제약 조건을 설정할 때 사용한다.
제약의 우선순위를 조정하거나,
필요에 따라 레이아웃이 유연하게 조정되도록 할 때 사용된다.
대부분의 경우는 제약조건을 우선순위 1000
으로 설정되다보니 절대적으로 지키게끔 되어있지만,
여러 제약 조건이 서로 충돌할 수 있는 상황에서는
다른 한 쪽의 일부 제약 조건이 유연하게 조정되어야 할 때 priority
값을 낮춘다.
- 스크롤 뷰 내의 컨텐츠 크기 조절
스크롤 뷰 내에서 컨텐츠가 스크롤될 수 있도록 높이나 너비의 제약 priority를 낮춰준다.
- 크기 제약을 조정이 필요할 때
예를 들자면 뷰가 여러개 있고 화면에 배치해야하는 상황일 때, 화면 크기에 따라 뷰의 너비나 높이를 유동적으로 조정해야 하는 경우는 우선순위를 조정해 유연성을 높인다.
- 중복된 제약 처리
어떤 제약 조건이 화면에 우선 적용되고, 다른 조건은 상황에 따라 조정되도록 하려면 priority를 다르게 설정한다.
마지막 중복된 제약 처리는 쉽게 말하자면
서로 맞지 않고 어긋나는 두 개 이상의 제약 조건이 있을 때,
어떤 조건을 우선적용 할 지 결정하기 위해서 priority
다르게 설정하는 것이다.
예를 들어 버튼 너비를 조정하는 두 가지 제약 조건이 있을 경우,
(priority 1000)
(priority 750)
이 경우에는 priority 1000
인 제약이 절대적으로 지켜져야 하기 때문에
버튼 너비는 항상 200
으로 고정이 된다.
그러나 priority 750
인 "화면 절반 너비"의 제약은 1000보다 작은 750
이기 때문에,
상황에 따라 1번 버튼과 조정이 가능한 것으로 해석되어 필요할 때만 적용되거나 무시될 수 있다.
이렇게 priority
를 다르게 설정해서 상황에 따라 일부 제약 조건을 유연하게 조정하는 것이 바로 중복된 제약 처리의 핵심이라고 볼 수 있겠다.
priority
는 "제약 조건의 중요도"를 나타내는 값이고,
priority
가 높은 제약은 더 강하게 지켜져야하는 제약이며
낮은 priority
는 필요에 따라 조정이 될 수 있는 제약이다.
1000
은 제약이 반드시 지켜져야 한다는 의미, UIkit에서는 이 제약을 최우선으로 유지하려고 한다.
250
, 750
과 같은 값은 제약이 유지되도록 노력하되, 필요하다면 조정될 수 있다는 의미다.
솔직히 처음 공부할 땐 priority가 화면 요소들을 어떻게 배치할 지 결정하는 속성으로 이해한 것 같다.
하지만 priority는 제약 조건의 유연성을 결정하는 속성이고,
그 제약끼리 충돌할 경우 어떤 제약을 우선적으로 적용 할지를 정하는 역할을 한다는 점에서 차이를 느꼈다.
priority는 레이아웃이 어떻게 유동적으로 조정될지에 대한 중요한 역할을 하는 것이었다..
앞으로 UI 설계를 할 때 우선순위를 적절히 설정하게 되면 뷰들의 배치를 적용하거나
크기에 따라 뭘 더 우선적으로 보여줘야하는지 더 섬세하게 고민해본 뒤 적용해야겠다라는 생각이 들었다.
고민하셨던 내용을 열심히 찾아보신게 느껴져요!!!
저도 설명을 드릴 때 정리를 못 했는데, 글을 보고 머릿속에서도 정리가 된 느낌이네요!!
짱입니다!!