UIScreen.mainScreen().nativeBounds.height 无法使用 Xcode 7/Swift 2,目标 iOS7
UIScreen.mainScreen().nativeBounds.height not working using Xcode 7/Swift 2, Target iOS7
过去,当我使用 Xcode 6.4 时,我能够根据设备大小调整字体大小等内容。这是针对我的针对 iOS 7 的应用程序。现在对于 Xcode 7 和 Swift 2 它只允许 iOS 8 和更新版本。它提示我用 3 个不同的选项修复它。我无法获得任何工作选择。有没有一种方法可以针对 Xcode 7 中的不同设备使用 Swift 2 针对较旧的 iOS 7 设备进行调整?
在 Xcode 6.4 中,在我的 viewDidLoad()
中看起来像这样:
if UIScreen.mainScreen().nativeBounds.height == 1334.0 {
//Name Details
redLabel.font = UIFont (name: "Arial", size: 13)
yellowLabel.font = UIFont (name: "Arial", size: 13)
greenLabel.font = UIFont (name: "Arial", size: 13)
blueLabel.font = UIFont (name: "Arial", size: 13)
}
在 Xcode 7 和 Swift 2 中,它给了我一个警报 'nativeBounds' is only available on iOS 8.0 or newer
。然后它会提示使用 3 种不同的可能修复方法来修复它:
1) 如果我选择 Fix-it Add 'if available' version check
它会这样做:
if #available(iOS 8.0, *) {
if UIScreen.mainScreen().nativeBounds.height == 1136.0 {
//Name Details
redKid.font = UIFont (name: "Arial", size: 13)
yellowKid.font = UIFont (name: "Arial", size: 13)
greenKid.font = UIFont (name: "Arial", size: 13)
blueKid.font = UIFont (name: "Arial", size: 13)
}
} else {
// Fallback on earlier versions
}
2) 如果我选择 Fix-it Add @available attribute to enclosing instance method
它会这样做:
@available(iOS 8.0, *)
override func viewDidLoad()
3) 如果我选择 Fix-it Add @available attribute to enclosing class
,它会这样做:
@available(iOS 8.0, *)
class ViewController: UIViewController {
如何解决此问题并使其 运行 成为 iOS7 的目标并针对不同的设备屏幕尺寸进行调整?
谢谢。
我做了一些研究,发现我可以在 viewDidLoad()
中使用 let bounds = UIScreen.mainScreen().bounds
。然后我可以根据 bounds.size.height
设置 font
和其他项目。所以一个例子是:
if bounds.size.height == 568.0 { // 4" Screen
redLabel.font = UIFont (name: "Arial", size: 15)
} else if bounds.size.height == 667.0 { // 4.7" Screen
redLabel.font = UIFont (name: "Arial", size: 18)
}
为了找到每个设备的 bounds.size.height
,我在 viewDidLoad()
上做了一个 print(bounds.size.height)
。
我可以指定两个不同的设备并添加更多,例如 iPhone 6 Plus 和 iPad Retina。当我将 iOS Deployment Target
设置为 iOS 7.0.
时有效
在运行时,使用 UIScreen 对象的 bounds 和 scale 属性来了解 UIKit 如何向您的应用程序呈现显示,以及nativeBounds 和 nativeScale 当您需要使用显示器上的确切像素数时。
过去,当我使用 Xcode 6.4 时,我能够根据设备大小调整字体大小等内容。这是针对我的针对 iOS 7 的应用程序。现在对于 Xcode 7 和 Swift 2 它只允许 iOS 8 和更新版本。它提示我用 3 个不同的选项修复它。我无法获得任何工作选择。有没有一种方法可以针对 Xcode 7 中的不同设备使用 Swift 2 针对较旧的 iOS 7 设备进行调整?
在 Xcode 6.4 中,在我的 viewDidLoad()
中看起来像这样:
if UIScreen.mainScreen().nativeBounds.height == 1334.0 {
//Name Details
redLabel.font = UIFont (name: "Arial", size: 13)
yellowLabel.font = UIFont (name: "Arial", size: 13)
greenLabel.font = UIFont (name: "Arial", size: 13)
blueLabel.font = UIFont (name: "Arial", size: 13)
}
在 Xcode 7 和 Swift 2 中,它给了我一个警报 'nativeBounds' is only available on iOS 8.0 or newer
。然后它会提示使用 3 种不同的可能修复方法来修复它:
1) 如果我选择 Fix-it Add 'if available' version check
它会这样做:
if #available(iOS 8.0, *) {
if UIScreen.mainScreen().nativeBounds.height == 1136.0 {
//Name Details
redKid.font = UIFont (name: "Arial", size: 13)
yellowKid.font = UIFont (name: "Arial", size: 13)
greenKid.font = UIFont (name: "Arial", size: 13)
blueKid.font = UIFont (name: "Arial", size: 13)
}
} else {
// Fallback on earlier versions
}
2) 如果我选择 Fix-it Add @available attribute to enclosing instance method
它会这样做:
@available(iOS 8.0, *)
override func viewDidLoad()
3) 如果我选择 Fix-it Add @available attribute to enclosing class
,它会这样做:
@available(iOS 8.0, *)
class ViewController: UIViewController {
如何解决此问题并使其 运行 成为 iOS7 的目标并针对不同的设备屏幕尺寸进行调整? 谢谢。
我做了一些研究,发现我可以在 viewDidLoad()
中使用 let bounds = UIScreen.mainScreen().bounds
。然后我可以根据 bounds.size.height
设置 font
和其他项目。所以一个例子是:
if bounds.size.height == 568.0 { // 4" Screen
redLabel.font = UIFont (name: "Arial", size: 15)
} else if bounds.size.height == 667.0 { // 4.7" Screen
redLabel.font = UIFont (name: "Arial", size: 18)
}
为了找到每个设备的 bounds.size.height
,我在 viewDidLoad()
上做了一个 print(bounds.size.height)
。
我可以指定两个不同的设备并添加更多,例如 iPhone 6 Plus 和 iPad Retina。当我将 iOS Deployment Target
设置为 iOS 7.0.
在运行时,使用 UIScreen 对象的 bounds 和 scale 属性来了解 UIKit 如何向您的应用程序呈现显示,以及nativeBounds 和 nativeScale 当您需要使用显示器上的确切像素数时。