iOS

[iOS] AutoLayout Self-Sizing(채팅 말풍선은 어떻게 레이아웃을 잡았을까?)

snowe 2020. 10. 30. 01:19

01. 공부하게 된 계기..라벨에서 이런 문제점이

우리는 이렇게 라벨에서 글자가 넘어가는 것을 막기 위해서

leading, trailing을 잡아주거나, numberOfLines를 조정해주거나..

이러한 제약조건을 걸곤 한다. 근데 이렇게 됐을 때 문제가 발생한다. 내가 글을 쓰는 이유이기도 한..!

제약조건보다 글을 쓴 공간이 더 적을경우 생기는 문제점

몇글자 안되더라도 규칙을 따라야하기 때문에 불필요한 공간을 차지하게 된다. 물론, 글자수와 관계없이 항상 규칙을 따라야할 때에는 이 방법이 좋은 방법이겠지만 글자수에 맞는 유동적인 모양을 갖춰야 할 때에는 최상의 방법은 아닐 것이다.

 

02. Greater Than or Equal && Less Than or Equal

불필요한 공간을 없애기 위해 이러한 속성을 이용하면 된다. 그래서 이게 무슨 속성이냐면.. 그냥 직역을 해보면

  • Greater Than or Equal: ≥(같거나 크다)
  • Less Than or Equal: ≤(작거나 같다)

대충 감이 오실지 모르겠지만 좀 더 직관적으로는 이렇습니다.

Greater Than or Equal
  • Greater Than or Equal: 정해놓은 제약조건보다 더 커지거나 같을 것이다.
  • Less Than or Equal: 정해놓은 제약조건보다 더 작아지거나 같을 것이다.

내부 컨텐트에 맞게 조금 더 유동적인 제약조건 옵션이라고 이해하시면 될 것 같습니다.

이건 어디서 활용될까요?

 

03. 채팅 말풍선

말풍선 내부 컨텐츠에 따라 유동적으로 변하는 말풍선의크기

만약 Greater Than or Equal && Less Than or Equal 옵션을 사용하지 않았다면?

...이후 내용이 궁금해요

말풍선에 높이 제약에 걸려있기 때문에 내용이 더 있지만 해당 height값 이상으로는 팽창되지 않는다. 만약 내용의 길이만큼 UI뷰의 길이도 변화시키고자 한다면 UI뷰가 가지고 있는 높이 제약을 없애주거나 아까 공부한 Greater Than or Equal, Less Than or Equal 옵션을 활용해야 한다.

 

나는 말풍선의 최소 크기만 지정하고 싶어

  • [최소] 정해놓은 제약 값, [최대] no limit → Greater Than or Equal

나는 말풍선의 최대 크기는 정해놓고 싶어

  • [최소] no limit, [최대] 정해놓은 제약 값 → Less Than or Equal
최대 뷰의 길이가 250이고 그 이하의 값까지는 유동적으로 움직이되, 250을 넘어가게 되면 사진처럼 ...으로 표시