[ UIkit ] 스크롤 뷰에서 priority를 낮추는 이유

sonny·2024년 11월 12일
3

TIL

목록 보기
39/48
post-thumbnail

강의를 듣다가 스크롤 뷰 위에 스택 뷰를 얹고

priority1000 에서 250 으로 낮추는 내용이 나왔다.

해당 부분인데, 이렇게 하면 유연성이 높아져서.. 스크롤이 잘 된다라고 하시며

부연설명도 해주셨지만 좀처럼 이해가 되지 않았다.

오늘 마무리 시간에 팀원들과 데일리스크럼 시간을 통해 질문도 해보고

팀원들이 말해준 내용으로 얼추 이해는 되었지만,

그래도 이 부분 때문에 강의가 막혔으니 이걸 뚫으려면 적고 가야할 것 같다.


priority 란

음 쉽게 말해 제약 조건의 중요도를 설정하는 속성 이라고 한다.

내용을 번역해보니,

와 어렵다.. 번역을 해도 이해가 안된다.

그래서 정말 구글 검색을 제일 다양하게 해본 날인 듯 싶다.

그렇게 하여 알아낸 것,

priority 는 제약 조건이 충돌하게 될 때, 어떤 제약 조건이 우선 적용될지를 의미한다고 한다.

오늘의 예시에서는 스크롤뷰에서의 priority 를 낮추는 작업을 진행했지만,

앱을 만들면서 라벨간의 간격조정을 하거나 Text의 양이 많아져서

다른 레이아웃에 침범하게 될 경우를 대비하는 작업을 할 때도

priority로 제약을 걸어줘야 서로 침범하지 않는다고 한다.


priority를 낮추면 스크롤이 왜 유연하게 작동되는가

스크롤이 유연해지는 이유는 스택 뷰가 스크롤 뷰의 크기에 맞게

자유롭게 늘어나거나 줄어들 수 있기 때문이다.

만약 priority를 기본값인 1000 으로 설정하게 될 경우,

"이 크기는 절대 변하지 않아야 해!!" 라며 강하게 고정하는 것과 같다고 보면 된다.

이렇게 되면.. 스크롤 뷰가 스택 뷰의 크기를 변화시키지 못하다보니

그 제약으로 인해 화면 크기에 따라

스택뷰의 내용이 다 표시되지 않고 잘려서 보이는 현상이 생기거나

스크롤이 잘 안되는 상황이 생길 수 있는 것이다.

그 때!!

스택 뷰의 priority250으로 낮추면,

스택 뷰의 크기가 스크롤 뷰의 요구에 따라 조금씩 변할 수 있다.

스크롤 뷰가 필요에 따라 스택 뷰의 크기를 조정하면서

스크롤을 매끄럽게 하도록 허용해주는 것이다.


UIkit에서 priority는 주로 언제 사용하는가

앞서 말했듯이 주로 제약 조건을 설정할 때 사용한다.

제약의 우선순위를 조정하거나,

필요에 따라 레이아웃이 유연하게 조정되도록 할 때 사용된다.

대부분의 경우는 제약조건을 우선순위 1000으로 설정되다보니 절대적으로 지키게끔 되어있지만,

여러 제약 조건이 서로 충돌할 수 있는 상황에서는

다른 한 쪽의 일부 제약 조건이 유연하게 조정되어야 할 때 priority 값을 낮춘다.

  • 스크롤 뷰 내의 컨텐츠 크기 조절
    스크롤 뷰 내에서 컨텐츠가 스크롤될 수 있도록 높이나 너비의 제약 priority를 낮춰준다.
  • 크기 제약을 조정이 필요할 때
    예를 들자면 뷰가 여러개 있고 화면에 배치해야하는 상황일 때, 화면 크기에 따라 뷰의 너비나 높이를 유동적으로 조정해야 하는 경우는 우선순위를 조정해 유연성을 높인다.
  • 중복된 제약 처리
    어떤 제약 조건이 화면에 우선 적용되고, 다른 조건은 상황에 따라 조정되도록 하려면 priority를 다르게 설정한다.

마지막 중복된 제약 처리는 쉽게 말하자면

서로 맞지 않고 어긋나는 두 개 이상의 제약 조건이 있을 때,

어떤 조건을 우선적용 할 지 결정하기 위해서 priority 다르게 설정하는 것이다.

예시

예를 들어 버튼 너비를 조정하는 두 가지 제약 조건이 있을 경우,

  1. 버튼의 너비를 200으로 고정하는 제약 (priority 1000)
  2. 버튼의 너비를 화면 절반으로 설정하는 제약 (priority 750)

이 경우에는 priority 1000인 제약이 절대적으로 지켜져야 하기 때문에

버튼 너비는 항상 200으로 고정이 된다.

그러나 priority 750"화면 절반 너비"의 제약은 1000보다 작은 750 이기 때문에,

상황에 따라 1번 버튼과 조정이 가능한 것으로 해석되어 필요할 때만 적용되거나 무시될 수 있다.

이렇게 priority를 다르게 설정해서 상황에 따라 일부 제약 조건을 유연하게 조정하는 것이 바로 중복된 제약 처리의 핵심이라고 볼 수 있겠다.


요약하자면

priority는 "제약 조건의 중요도"를 나타내는 값이고,

priority가 높은 제약은 더 강하게 지켜져야하는 제약이며

낮은 priority는 필요에 따라 조정이 될 수 있는 제약이다.

  • 1000은 제약이 반드시 지켜져야 한다는 의미, UIkit에서는 이 제약을 최우선으로 유지하려고 한다.

  • 250, 750과 같은 값은 제약이 유지되도록 노력하되, 필요하다면 조정될 수 있다는 의미다.


음 ...

솔직히 처음 공부할 땐 priority가 화면 요소들을 어떻게 배치할 지 결정하는 속성으로 이해한 것 같다.

하지만 priority는 제약 조건의 유연성을 결정하는 속성이고,

그 제약끼리 충돌할 경우 어떤 제약을 우선적으로 적용 할지를 정하는 역할을 한다는 점에서 차이를 느꼈다.

priority는 레이아웃이 어떻게 유동적으로 조정될지에 대한 중요한 역할을 하는 것이었다..

앞으로 UI 설계를 할 때 우선순위를 적절히 설정하게 되면 뷰들의 배치를 적용하거나

크기에 따라 뭘 더 우선적으로 보여줘야하는지 더 섬세하게 고민해본 뒤 적용해야겠다라는 생각이 들었다.

profile
iOS 좋아. swift 좋아.

4개의 댓글

고민하셨던 내용을 열심히 찾아보신게 느껴져요!!!
저도 설명을 드릴 때 정리를 못 했는데, 글을 보고 머릿속에서도 정리가 된 느낌이네요!!
짱입니다!!

1개의 답글
comment-user-thumbnail
2024년 11월 13일

설명을 보니 확실히 각 레이아웃의 제약이 유연하게 작용해야 할 때를 예상하고 적용하면 좋은 부분이네요
예를 들어 스크롤이 길어져서 스택뷰의 다른 뷰들이 화면 밖으로 밀려나가버릴 때 스크롤 뷰의 우선순위를 낮추면 스택뷰의 크기가 우선적으로 정해져서 스크롤 뷰의 길이가 짧아지는 쪽으로 제약이 걸린다는 거 맞나요?
코드베이스로는 어떻게 제약을 걸 수 있을까요?

1개의 답글