[Swift4] AutoLayout의 Multiplier를 매우 쉽게 동적으로 전환하십시오!

개요



안녕하세요!
최근 iPhoneX, iPhoneXS Max 등 여러가지 기종이 나오고, 기종 ​​대응 좀처럼 고전하지 않습니까?
특히 iPhoneSE와 같이 해상도가 낮은 단말기만 특별히 대응하지 않으면 안되는 장면, 꽤 있다고 생각합니다.

그런 때에 표제대로입니다만, 예를 들어 어떤 요소의 가로폭을 Autolayout의 Constraint로 Multiplier를 지정해 결정하고 있는 경우iPhoneSEだけ縦幅足りなくてパツパツになっちゃうから, 他の端末よりも画面に対する縦幅の比を少し小さくしたい!무슨 일이야? (나는 꽤있다)

그럼 Swift에서 Multiplier를 바꿀까요?
라고 생각해도, 실은 Multiplier는 getOnly(취득만 가능, 재기록 불가)이므로

sample.swift
if deviseType = .iPhoneSE { // ここの条件は適当です笑
  sampleHeight.multiplier = 10:21
}

같은 글을 쓸 수는 없습니다 ...

그럼 NSLayoutConstraint의 extension 쓸까라고 하면, 거기까지가 아니구나, 가 되는 경우도 있겠네요.
그렇게 할 때 쉽게 할 수있는 방법을 소개합니다.

우선 Autolayout을 설정합시다.



첫째, 주요 Constraint를 정의합니다.

그런 다음 iPhoneSE와 같은 개별 대응을위한 Constraint를 준비합니다.

이미지의 차이는 두 가지가 있습니다.
1. Multiplier 내용
2. installed 확인
입니다.

installed에 체크가 없으면 Constraint는 비활성 상태이므로 기본적으로 첫 번째 이미지의 Constraint가 사용됩니다.
그런 다음 Swift에서 두 Constraint의 활성 및 비활성을 전환하는 것입니다!

나머지는 Swift 측에서 사용하는 Constraint를 전환합시다.



NALayoutConstraint는
isActive = true
isActive = false

액티브와 비 액티브 사이를 전환 할 수 있습니다.

sample.swift
if deviseType = .iPhoneSE { // ここの条件は適当です笑
  sampleHeight.isActive      = false
  sampleHeightForSE.isActive = true
}

이제 장치가 Multiplier를 전환 할 수 있습니다.
둘 이상의 Constraint를 준비하여 더 세밀하게 조건을 나눌 수 있습니다.

다만, Multiplier를 전환할 기회가 너무 많은 것 같으면 extension 써 메소드 사용합시다 웃음

불명점이나, 더 좋은 방법 있으면 의견으로 잘 부탁드립니다!

좋은 웹페이지 즐겨찾기