【swift】AutoLayoutのConstraintで端末毎のサイズを変更する
7156 ワード
storyboardのautolayoutを使った場合に、端末毎のサイズは画面サイズから比率で表示させる等をしなければなりませんが、NSLayoutConstraintを継承したクラスを作成してgetter,setterを設定することで、端末毎に対応したNSLayoutConstraintを利用することが出来ます。
Setting.swift
// 基準とする画面縦幅
let baseScreenHeight: CGFloat = 667.0
// 基準とする画面横幅
let baseScreenWidth: CGFloat = 375.0
// 端末サイズ計算 (Height)
func calculateDeviceHeightSize(_ values: CGFloat) -> CGFloat {
// iPhoneXの場合は、iPhone6の基準に合わす
if UIScreen.main.bounds.size.height == 812.0 {
return values
}
return values * UIScreen.main.bounds.size.height / baseScreenHeight
}
// 端末サイズ計算 (Width)
func calculateDeviceWidthSize(_ values: CGFloat) -> CGFloat {
return values * UIScreen.main.bounds.size.width / baseScreenWidth
}
CustomConstraint.swift
/**
Constraintを端末サイズ毎に変更するカスタムクラス
横方向のサイズに利用
*/
class CustomConstraintWidth: NSLayoutConstraint {
override var constant: CGFloat {
get {
return calculateDeviceWidthSize(super.constant)
}
set {
super.constant = newValue
}
}
}
/**
Constraintを端末サイズ毎に変更するカスタムクラス
縦方向のサイズに利用
*/
class CustomConstraintHeight: NSLayoutConstraint {
override var constant: CGFloat {
get {
return calculateDeviceHeightSize(super.constant)
}
set {
super.constant = newValue
}
}
}
storyboardで設定する場合は、以下のようにCustom Classを設定します。
StackViewのspacingを端末サイズ毎に変更する場合は、こちらになります。
CustomSpacingStackView.swift
/**
StackViewのspacingを端末サイズ毎に変更するカスタムクラス
*/
class CustomSpacingStackView: UIStackView {
override var spacing: CGFloat {
get {
return super.spacing
}
set {
if axis == .horizontal {
super.spacing = calculateDeviceWidthSize(newValue)
} else {
super.spacing = calculateDeviceHeightSize(newValue)
}
}
}
}
Author And Source
この問題について(【swift】AutoLayoutのConstraintで端末毎のサイズを変更する), 我々は、より多くの情報をここで見つけました https://qiita.com/nadioo/items/a0b0460414a7394fe2ef著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .