2014-09-04 51 views
1

我似乎遇到了iOS8坐标系的问题。我试图弄清楚这是否应该是它应该是一个错误。对我来说就像一个错误。但是当我访问一个元素的框架属性时,如果我将它作为iOS8和iOS 7运行,我会得到不同的坐标。似乎iOS8会将数字加倍,或者没有考虑到我在视网膜屏幕上运行它。此外,它似乎只影响对它们没有特定约束的帧。如果我添加一个宽度约束,那么宽度是正确的,但如果它是自动计算宽度,那么它是双倍的。iOS坐标系错了

我在这里创建了一个测试项目https://github.com/smitt04/TestCoodinates供任何人试用。

这里也贴上了故事板。

import UIKit 
class ViewController: UIViewController { 
@IBOutlet weak var button: UIButton! 
    @IBOutlet weak var label: UILabel! 
    @IBOutlet weak var version: UILabel! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     label.text = "Frame is \(button.frame)" 
     version.text = "iOS: \(UIDevice.currentDevice().systemVersion)" 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

和结果是

的iOS 7

iOS7

iOS 8的

iOS 8

任何有识之士将不胜感激。谢谢。

+6

'viewDidLoad'太快了。视图的大小尚未设置正确。 – rmaddy 2014-09-04 16:31:11

+0

即使我现在iOS版本之间的像素差异为0.5像素,它似乎可以解决这个问题。但是,我认为'viewDidLoad'可以让你的视图在它出现之前初始化,并且它只被调用一次。这对我来说有点奇怪,在较旧的ios版本中可以正常工作,但在'iOS 8'中不再适用' – smitt04 2014-09-04 17:04:59

+0

我认为他们切换了坐标系。我一直在viewDidLayoutSubviews中设置一些帧,当我使用[UIScreen mainScreen] .bounds作为参考坐标系似乎是倒置的 – artud2000 2014-09-04 17:46:56

回答

0

viewDidLoad获取帧坐标永远不可靠。它在iOS7和iOS8中似乎更可靠。根据您的需要,我发现设置或更改坐标的最佳位置是viewWillLayoutSubviewsviewDidLayoutSubviews