XCode Simulator和实际设备显示不同的UI

时间:2018-09-06 10:30:16

标签: swift xcode

我遇到了一个问题,希望您能帮助我!事实证明,这是我第一次遇到实际iPhoneX设备的UI与XCode模拟器的UI不同的问题。以下是此图片:

Left is the actual device, and Right is the simulator

一个带有金色边框的框是此问题的唯一受害者。我尝试过重新启动计算机和电话,并且还将电话和XCode更新为最新版本。与iPhone 6类似的问题。我已将问题UIImageView的代码放入 searchBack 。其尺寸取决于设备的显示尺寸,并且其位置在iPhone和iPad上也不同:

searchBack = UIImageView(frame:CGRect(x:0, y:0, width: displayWidth*0.9, height: displayHeight*0.1))
if UIDevice.current.model.range(of: "iPad") != nil {
    self.searchBack.center = CGPoint(x: self.displayWidth*0.5, y: self.displayHeight*0.255)
} else {
    self.searchBack.center = CGPoint(x: self.displayWidth*0.5, y: self.displayHeight*0.207)
}
searchBack.image = UIImage(named: "searchBar Borders.png")
searchBack.contentMode = .scaleToFill
self.view.addSubview(searchBack)

非常感谢您的帮助! adv中的Chrz

2 个答案:

答案 0 :(得分:0)

好的,结果是,当我试图找出正在发生的事情时,我随机注释了下面的代码块,运行了它,然后取消了注释,再次运行了,问题解决了。

    if ( UIDevice.current.model.range(of: "iPad") != nil){
        self.searchBack.center = CGPoint(x: self.displayWidth*0.5, y: self.displayHeight*0.255)
    } else {
        self.searchBack.center = CGPoint(x: self.displayWidth*0.5, y: self.displayHeight*0.207)
    }

如果有人可以向我解释为什么会发生这种情况,那将是惊人的,这样我就可以避免在下一次这样的事情上浪费时间。

答案 1 :(得分:0)

该代码放在哪里? ViewDidLoad?

我建议使用自动布局,而不是像这样计算大小。另外,在那一点上,superView的宽度有时会与实际屏幕尺寸不同。

发生这种情况是因为视图尚未在viewDidLoad上计算实际屏幕大小。这会在视图生命周期的稍后阶段发生。

如果您使用自动布局来正确缩放和定位视图,则引擎将基于对所有不同设备施加的约束来计算尺寸。

同样,您可以有一些逻辑来为iPad设置不同的约束,也可以使用iOS提供的“设备特征”,以帮助您识别不同的屏幕类别和方向。

如果能帮助您理解该问题并接受它,我将不胜感激。

谢谢!