我的应用被拒绝了,因为它在iPhone 4s和iPad分辨率的iPad上看起来不太好。我有一些按钮与该分辨率上的某些字段重叠。问题是,现在我已经查看了XCode,我发现所有非iPhone和iPhone都拥有相同的大小类。我怎么能在他们之间做出改变?我在代码中添加了这些按钮。其他字段添加在IB中。
编辑:代码中添加的按钮以绝对坐标定位,IB中添加的字段使用自动布局。
答案 0 :(得分:0)
您可以根据身高UIScreen.main.bounds.height <= HeightConstant.iPhone4sHeight
手机的高度值
static let iPhone5sHeight: CGFloat = 568
static let iPhone4sHeight: CGFloat = 480
答案 1 :(得分:0)
通常我不会使用故事板:P但是对于这种情况,因为您使用的是故事板,所以您可以使用特征。这些特性将允许您使用大小,方向或设备为同一控制器设计多种设计。
这是没有任何代码的最干净的解决方案。
答案 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
}
}
利用此方法处理方向更改。
注意:强>
如果您想更改横向模式的布局,您也可以这样做 有很多关于如何做的教程。我认为你可以谷歌并找到合适的答案。