iOS - 如何区分iPhone屏幕

时间:2017-05-30 10:46:28

标签: ios swift xcode size-classes

我的应用被拒绝了,因为它在iPhone 4s和iPad分辨率的iPad上看起来不太好。我有一些按钮与该分辨率上的某些字段重叠。问题是,现在我已经查看了XCode,我发现所有非iPhone和iPhone都拥有相同的大小类。我怎么能在他们之间做出改变?我在代码中添加了这些按钮。其他字段添加在IB中。

编辑:代码中添加的按钮以绝对坐标定位,IB中添加的字段使用自动布局。

3 个答案:

答案 0 :(得分:0)

您可以根据身高UIScreen.main.bounds.height <= HeightConstant.iPhone4sHeight

区分不同的设备

手机的高度值

static let iPhone5sHeight: CGFloat = 568 static let iPhone4sHeight: CGFloat = 480

答案 1 :(得分:0)

通常我不会使用故事板:P但是对于这种情况,因为您使用的是故事板,所以您可以使用特征。这些特性将允许您使用大小,方向或设备为同一控制器设计多种设计。

@bam answer

这是没有任何代码的最干净的解决方案。

答案 2 :(得分:0)

虽然我有点晚了,但我之前遇到了确切的问题。但是。

第1步:

采用基本屏幕进行设计。我选择iphone 7 plus。

第2步:

定义一些常量。

<强>为什么吗

我们需要将它与自动布局约束的常数相乘。

为何选择自动布局?

如果您想在所有设备中调整您的应用,必须使用    自动布局尺寸类

我正在给你我的常数:

var SCREEN_WIDTH = UIScreen.main.bounds.size.width
var SCREEN_HEIGHT = UIScreen.main.bounds.size.height
var BASE_SCREEN_HEIGHT:CGFloat = 736.0
var SCREEN_MAX_LENGTH = max(SCREEN_WIDTH, SCREEN_HEIGHT)
var ASPECT_RATIO_RESPECT_OF_7P = SCREEN_MAX_LENGTH / BASE_SCREEN_HEIGHT

第3步:

你完成了。现在该怎么用呢。假设你自动布局到一个领先常数为30的按钮

viewDidLoad

中的

只写:

yourButtonLeadingConstraint.constant = 30 * ASPECT_RATIO_RESPECT_OF_7P

仅对于此行,它将在所有其他设备中保持30Px的宽高比。

第4步:

设备方向怎么样?

有一个名为

的功能
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        if UIDevice.currentDevice().orientation.isLandscape.boolValue {
            print("Landscape")
            //write your code here such changing autolayout value
        } else {
            print("Portrait")
           // write your code here such changing autolayout value
        }
    }

利用此方法处理方向更改。

注意:

如果您想更改横向模式的布局,您也可以这样做 有很多关于如何做的教程。我认为你可以谷歌并找到合适的答案。