본문 바로가기
iOS/이슈

[iOS Issue] iOS12에서 Constraint의 priority 사용 시 크래시 발생

by Sky Titan 2022. 8. 17.
728x90

 

 

How can I change constraints priority in run time

I have a view which has dynamic height and I am trying to change this view height priority in run time. Here is my part of code; if (index == 0) { surveyViewHeightConstraint.constant = 0;

stackoverflow.com

 

 

Apple Developer Documentation

 

developer.apple.com

 constraint의 priority 설정 시에 iOS12에서 priority를 1000으로 설정할 경우 크래시가 발생한다는 내용이다.

deleteButtonTop.priority = .init(1000)

 

 

Root cause

 constraint의 UILayoutPriority는 기본적으로 required, non-required로 구분된다.

  • required:
    • rawValue 1000에 해당하는 priority
    • 기본적으로 모든 constraint은 xib에서 생성될 때 따로 설정을 안하면 required로 지정되어있다.
  • non-required:
    • required보다 낮은 숫자에 해당하는 priority
    • enumeration case로는 defaultLow(250), defaultHight(750)이 존재한다.

 

apple 가이드 문서에 따르면 required에서 non-required로, 혹은 그 반대의 경우로 수정하는 것이 허용되어있지 않다고 한다.

 

근데 iOS13부터는 이런 제한이 사라진 것 같고 iOS12까지만 제한이 있는 것 같다.

때문에 priority값을 나중에 변경할 필요가 있다면, 위의 크래시를 피하기 위해서 priority를 non-required값을 사용해야한다.

ex) 999 - 250, defaultHigh - defaultLow

728x90

댓글