iOS/이슈
[iOS Issue] iOS12에서 Constraint의 priority 사용 시 크래시 발생
Sky Titan
2022. 8. 17. 14:01
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