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
iOS 8的
任何有识之士将不胜感激。谢谢。
'viewDidLoad'太快了。视图的大小尚未设置正确。 – rmaddy 2014-09-04 16:31:11
即使我现在iOS版本之间的像素差异为0.5像素,它似乎可以解决这个问题。但是,我认为'viewDidLoad'可以让你的视图在它出现之前初始化,并且它只被调用一次。这对我来说有点奇怪,在较旧的ios版本中可以正常工作,但在'iOS 8'中不再适用' – smitt04 2014-09-04 17:04:59
我认为他们切换了坐标系。我一直在viewDidLayoutSubviews中设置一些帧,当我使用[UIScreen mainScreen] .bounds作为参考坐标系似乎是倒置的 – artud2000 2014-09-04 17:46:56