gpt4 book ai didi

ios - 如何仅在自动布局中使用 Storyboard为 iPhone 5s 或 iPhone SE 设置约束?

转载 作者:可可西里 更新时间:2023-11-01 03:37:42 26 4
gpt4 key购买 nike

我正在尝试使用 Storyboard为特定的 iPhone SE 或 5s 使用 AutoLayout 设置约束。

您能否推荐一些使用 Storyboard 来处理仅适用于不同 iPhone 的约束的屏幕截图?

最佳答案

Storyboard 中iPhoneSE 和iPhone6/7 之间的区别是我期待已久的东西。但不幸的是,我不得不意识到它们具有相同的尺寸等级,因此(据我所知)不可能为两个内部 Storyboard设置约束差异。 (如果我错了 - 请告诉我!!)。

但是,您可以在代码中完成。

您可以使用 AnchorPointsLayoutAnchors在代码中设置约束。但通常情况下,以下内容适用于我的大多数情况:

我在我的 UIDevice-ModelNames 周围使用了一个 Switch-case,并将 iPhoneSE 的 Layout-Constraints 设置为不同于 iPhone6/7(或任何我想区分的设备)。

话虽如此,完全在代码中创建 View (及其约束)通常是个好主意,而无需 Storyboard。但我认为,对于简单的项目,快速想出一个 Storybard-Layout 及其 Constraint-settings 有时仍然很有用。然后我执行以下操作来区分设备:

enter image description here

// create the constraint-outlet by CTRL-drag
// one of your defined Constraint-lines from
// Storyboard directly to your Code

@IBOutlet weak var bannerWidthConstraint: NSLayoutConstraint!

// then for example inside viewDidLoad, set the outlet's constant to the value needed...
// Distinguish manually between UIDevices...
override func viewDidLoad() {

switch UIDevice.current.modelName {
case Devices.IPhone5, Devices.IPhone5S, Devices.IPhone5C:
//, Devices.Simulator:
self.bannerWidthConstraint.constant = 73
case Devices.IPhone6, Devices.IPhone6S, Devices.IPhone7, Devices.IPhone8:
//, Devices.Simulator:
self.bannerWidthConstraint.constant = 96
case Devices.IPhone6Plus, Devices.IPhone6SPlus, Devices.IPhone7Plus, Devices.IPhone8Plus:
//, Devices.Simulator:
self.bannerWidthConstraint.constant = 110
case Devices.IPhoneX:
//, Devices.Simulator:
self.bannerWidthConstraint.constant = 96
default:
self.bannerWidthConstraint.constant = 73
}
}

备注:使用模拟器请注意!模拟器有自己的 UIDevice-modelName,因此您需要取消注释 Devices.Simulator 注释中您运行模拟器的 Device-Size(即根据您的模拟器运行的目标!)。 --> 请注意,每个 switch-case 都可以是模拟器设备!!

并且不要忘记在您的代码库中的某处定义您的设备:(--> 当然,当新的 Apple 设备问世时,您需要更新这些...)

public enum Devices: String {
case IPodTouch5
case IPodTouch6
case IPhone4
case IPhone4S
case IPhone5
case IPhone5C
case IPhone5S
case IPhone6
case IPhone6Plus
case IPhone6S
case IPhone6SPlus
case IPhone7
case IPhone7Plus
case IPhoneSE
case IPhone8
case IPhone8Plus
case IPhoneX
case IPad2
case IPad3
case IPad4
case IPad5
case IPadAir
case IPadAir2
case IPadMini
case IPadMini2
case IPadMini3
case IPadMini4
case IPadPro_9_7
case IPadPro_12_9
case IPadPro_12_9_2ndGen
case IPadPro_10_5
case AppleTV_5_3
case AppleTV_6_2
case HomePod
case Simulator
case Other
}

还有……

public extension UIDevice {

public var modelName: Devices {
var systemInfo = utsname()
uname(&systemInfo)
let machineMirror = Mirror(reflecting: systemInfo.machine)
let identifier = machineMirror.children.reduce("") { identifier, element in
guard let value = element.value as? Int8 , value != 0 else { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}

switch identifier {
case "iPod5,1": return Devices.IPodTouch5
case "iPod7,1": return Devices.IPodTouch6
case "iPhone3,1", "iPhone3,2", "iPhone3,3": return Devices.IPhone4
case "iPhone4,1": return Devices.IPhone4S
case "iPhone5,1", "iPhone5,2": return Devices.IPhone5
case "iPhone5,3", "iPhone5,4": return Devices.IPhone5C
case "iPhone6,1", "iPhone6,2": return Devices.IPhone5S
case "iPhone7,2": return Devices.IPhone6
case "iPhone7,1": return Devices.IPhone6Plus
case "iPhone8,1": return Devices.IPhone6S
case "iPhone8,2": return Devices.IPhone6SPlus
case "iPhone9,1", "iPhone9,3": return Devices.IPhone7
case "iPhone9,2", "iPhone9,4": return Devices.IPhone7Plus
case "iPhone8,4": return Devices.IPhoneSE
case "iPhone10,1", "iPhone10,4": return Devices.IPhone8
case "iPhone10,2", "iPhone10,5": return Devices.IPhone8Plus
case "iPhone10,3", "iPhone10,6": return Devices.IPhoneX
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return Devices.IPad2
case "iPad3,1", "iPad3,2", "iPad3,3": return Devices.IPad3
case "iPad3,4", "iPad3,5", "iPad3,6": return Devices.IPad4
case "iPad4,1", "iPad4,2", "iPad4,3": return Devices.IPadAir
case "iPad5,3", "iPad5,4": return Devices.IPadAir2
case "iPad6,11", "iPad6,12": return Devices.IPad5
case "iPad2,5", "iPad2,6", "iPad2,7": return Devices.IPadMini
case "iPad4,4", "iPad4,5", "iPad4,6": return Devices.IPadMini2
case "iPad4,7", "iPad4,8", "iPad4,9": return Devices.IPadMini3
case "iPad5,1", "iPad5,2": return Devices.IPadMini4
case "iPad6,3", "iPad6,4": return Devices.IPadPro_9_7
case "iPad6,7", "iPad6,8": return Devices.IPadPro_12_9
case "iPad7,1", "iPad7,2": return Devices.IPadPro_12_9_2ndGen
case "iPad7,3", "iPad7,4": return Devices.IPadPro_10_5
case "AppleTV5,3": return Devices.AppleTV_5_3
case "AppleTV6,2": return Devices.AppleTV_6_2
case "AudioAccessory1,1": return Devices.HomePod
case "i386", "x86_64": return Devices.Simulator
default: return Devices.Other
}
}
}

关于ios - 如何仅在自动布局中使用 Storyboard为 iPhone 5s 或 iPhone SE 设置约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43521024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com