[Swift] Autolayout Multiplier 비율 동적으로 적용하기

반응형

스위프트의 동적 멀티플라이어

 

오토레이아웃을 사용하다보면 동적으로 멀티플라이어 값을 동적으로 바꿔야 할 경우가 있습니다. 특히나 iPad iPhone을 동시에 개발 할 때 필요합니다. 해당 비율을 동적으로 주기 위해서는 NSLayoutConstraint에 multiplier를 적용해주면 되지만 몇 가지 생각해야 하는 것이 있습니다. 다음과 같이 Constraint를 removeConstraint로 삭제한 뒤에 다시 addConstraint를 이용해 추가해줘야 합니다. 또한 새로 화면을 업데이트 하기 위해서 layoutIfNeeded 함수를 호출해줘야 합니다.

 

동적 멀티플라이어 적용


 

▼ 우선 다음과 같이 extension을 사용해 constraintWithMultiplier라는 함수를 만들어줍니다. 내부적으로 하는 일은 그냥 새로운 NSLayoutConstraint를 반환하는 역할을 합니다.

 

다음은 constraintWithMultiplier 익스텐션을 사용해서 .pad 일때와 .phone 일때를 구분합니다. removeConstraint 함수로 이전 constraint를 삭제하고 addConstraint 함수로 새로운 constraint를 추가합니다. 마지막으로 layoutIfNeeded 함수를 호출하고 새로 만들어진 NSLayoutConstraint를 나중에 삭제를 위해서 전역 변수로 저장해 놓습니다.

 

참고로 위에 코드에서 else 로 처리하면 .tv, .mac, .carPlay를 모두 통용하게 되니 다른 OS를 개발한다면 switch 문으로 적용하는게 좋을 것 같습니다.

반응형

댓글

Designed by JB FACTORY