J'ai un ViewController conçu pour iPhone SE
Comme vous pouvez le constater, j'ai aussi une contrainte Align Top to: Safe Area Equals 75
La question est, est-il possible de changer cette valeur pour iPhone 8 et iPhone 8 Plus? Par exemple:
nous étions confrontés à un problème similaire. Nous avons résolu avec la classe d'assistance appelée scaled. Ce qui fondamentalement ne fait que multiplier la taille de quelque chose, ce qui devrait paraître plus gros sur un appareil plus grand.
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
}
}
}
Et mise en place du groupe de résolution
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
}
}
Et l'utilisation dans l'application
fileprivate let footerHeight = CGFloat(180).scaled
Ne pas utiliser Interface Builder, no. Contraintes, vous ne pouvez cibler que les tailles Compacte, Normale ou N'importe quelle taille et tous les modèles d'iPhone ont une largeur et une hauteur régulières en mode Portrait.
Si vous voulez ce type de granularité, vous devez plutôt le faire avec du code.
Ceci n'est pas applicable dans IB, vous pouvez essayer dans le code en associant la contrainte supérieure de la vue en tant qu'IBOutlet et dans viewDidLayoutSubviews
override func viewDidLayoutSubviews()
{
if(deviceWidthSE)
{
self.viewTopCon.constant = 75
}
else
if(deviceWidth8)
{
self.viewTopCon.constant = 85
}
else
if(deviceWidth8Plus)
{
self.viewTopCon.constant = 105
}
}