IPhone SE用に設計されたViewControllerを持っています
ご覧のとおり、私には制約もありますAlign Top to: Safe Area Equals 75
問題は、iPhone 8とiPhone 8 Plusでこの値を変更することは可能ですか?例えば:
私たちは同様の問題に直面していました。私たちはscaledと呼ばれるヘルパークラスで解決しました。これは基本的に何かのサイズを乗算するだけであり、より大きなデバイスではより大きく表示されます。
extension CGFloat {
public var scaled: CGFloat {
switch UIDevice.type.getResolutionGroup()! {
case .lr320x568:
return self
case .lr375x667:
return self * 1.1
case .lr414x736:
return self * 1.2
case .lr768x1024:
return self * 1.3
// For iPads
case .lr1024x1366:
return self * 1.3
}
}
}
そして、決議グループの実施
public func getResolutionGroup() -> ResolutionGroup? {
switch self {
case .iPhone5, .iPhone5C, .iPhone5S, .iPhoneSE, .iPodTouch5, .iPodTouch6:
return .lr320x568
case .iPhone6, .iPhone6S, .iPhone7:
return .lr375x667
case .iPhone6Plus, .iPhone6SPlus, .iPhone7Plus:
return .lr414x736
case .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4:
return .lr768x1024
case .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2:
return .lr768x1024
case .iPadPro:
return .lr1024x1366
case .simulator:
return isiPhone() ? .lr320x568 : .lr768x1024
default:
return .lr320x568
}
}
そしてアプリでの使い方
fileprivate let footerHeight = CGFloat(180).scaled
この問題を克服するために、小さな library を作成したので、1行のコードを記述する必要はなく、クラス(NSLayoutHelper)を制約に割り当てるだけで、制約を更新できますすべてのデバイスが異なります。
制約の更新用
出力
Interface Builderを使用していません。制約は、コンパクト、レギュラー、または任意のサイズのみをターゲットにすることができ、すべてのiPhoneモデルは、縦長モードのときにコンパクト幅とレギュラー高さを持ちます。
この種の細分性が必要な場合は、代わりにコードで行う必要があります。
これはIBには適用されません。コードの中で、ビューの上部の制約をIBOutletとして、そしてviewDidLayoutSubviewsにフックすることで試すことができます。
override func viewDidLayoutSubviews()
{
if(deviceWidthSE)
{
self.viewTopCon.constant = 75
}
else
if(deviceWidth8)
{
self.viewTopCon.constant = 85
}
else
if(deviceWidth8Plus)
{
self.viewTopCon.constant = 105
}
}