如何为 iPhone 8 屏幕与 iPhone X 及以上屏幕设置不同的底部锚点常量?
How to have different constants for bottom anchor for iPhone 8 screen vs iPhone X and above?
我已经做了一些研究,但我仍然无法找到这个问题的答案:我想保持从屏幕底部到菜单底部的常数 -6 以进行预 iPhone X 屏幕类型。当 运行 在 X 或以上时,常量为 0,因为不需要。我已尝试验证 iOS 版本,但显然它始终默认为模型 8 上的 safeAreaLayoutGuide。我该怎么办?我只想到更多 "manual" 解决方案,例如屏幕高度,但我知道这不是可行的方法。请帮助。下面的代码。
view.addSubview(programMainMenu)
if #available(iOS 11.0, *) { // gets called on 8.
let safeGuide = self.view.safeAreaLayoutGuide
let safeMenuConstraints = [
programMainMenu.bottomAnchor.constraint(equalTo: safeGuide.bottomAnchor, constant: 0),
programMainMenu.leadingAnchor.constraint(equalTo: safeGuide.leadingAnchor, constant: 8),
programMainMenu.trailingAnchor.constraint(equalTo: safeGuide.trailingAnchor, constant: -8),
programMainMenu.heightAnchor.constraint(equalToConstant: 90)
]
NSLayoutConstraint.activate(safeMenuConstraints)
} else {
let mainMenuConstraints = [
programMainMenu.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -6), // i need to have this on 8 but not above
programMainMenu.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8),
programMainMenu.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8),
programMainMenu.heightAnchor.constraint(equalToConstant: 90)
]
NSLayoutConstraint.activate(mainMenuConstraints)
}*
你需要
var cons = 0 // set values for it inside each switch case
if UIDevice().userInterfaceIdiom == .phone {
switch UIScreen.main.nativeBounds.height {
case 1136:
print("iPhone 5 or 5S or 5C")
cons = ///
case 1334:
print("iPhone 6/6S/7/8")
case 1920, 2208:
print("iPhone 6+/6S+/7+/8+")
case 2436:
print("iPhone X/XS/11 Pro")
case 2688:
print("iPhone XS Max/11 Pro Max")
case 1792:
print("iPhone XR/ 11 ")
default:
print("Unknown")
}
}
然后在这里使用var
programMainMenu.bottomAnchor.constraint(equalTo: safeGuide.bottomAnchor,
constant:cons),
我已经做了一些研究,但我仍然无法找到这个问题的答案:我想保持从屏幕底部到菜单底部的常数 -6 以进行预 iPhone X 屏幕类型。当 运行 在 X 或以上时,常量为 0,因为不需要。我已尝试验证 iOS 版本,但显然它始终默认为模型 8 上的 safeAreaLayoutGuide。我该怎么办?我只想到更多 "manual" 解决方案,例如屏幕高度,但我知道这不是可行的方法。请帮助。下面的代码。
view.addSubview(programMainMenu)
if #available(iOS 11.0, *) { // gets called on 8.
let safeGuide = self.view.safeAreaLayoutGuide
let safeMenuConstraints = [
programMainMenu.bottomAnchor.constraint(equalTo: safeGuide.bottomAnchor, constant: 0),
programMainMenu.leadingAnchor.constraint(equalTo: safeGuide.leadingAnchor, constant: 8),
programMainMenu.trailingAnchor.constraint(equalTo: safeGuide.trailingAnchor, constant: -8),
programMainMenu.heightAnchor.constraint(equalToConstant: 90)
]
NSLayoutConstraint.activate(safeMenuConstraints)
} else {
let mainMenuConstraints = [
programMainMenu.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -6), // i need to have this on 8 but not above
programMainMenu.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8),
programMainMenu.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8),
programMainMenu.heightAnchor.constraint(equalToConstant: 90)
]
NSLayoutConstraint.activate(mainMenuConstraints)
}*
你需要
var cons = 0 // set values for it inside each switch case
if UIDevice().userInterfaceIdiom == .phone {
switch UIScreen.main.nativeBounds.height {
case 1136:
print("iPhone 5 or 5S or 5C")
cons = ///
case 1334:
print("iPhone 6/6S/7/8")
case 1920, 2208:
print("iPhone 6+/6S+/7+/8+")
case 2436:
print("iPhone X/XS/11 Pro")
case 2688:
print("iPhone XS Max/11 Pro Max")
case 1792:
print("iPhone XR/ 11 ")
default:
print("Unknown")
}
}
然后在这里使用var
programMainMenu.bottomAnchor.constraint(equalTo: safeGuide.bottomAnchor,
constant:cons),