У меня, похоже, возникают проблемы с системой координат iOS8. Я пытаюсь понять, так ли это, как предполагается, или ошибка. Кажется, это ошибка. Но когда я получаю доступ к свойству frame элемента, я получаю разные координаты, если я запускаю его как 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
Это, казалось, исправить, хотя теперь я получаю разницу в размере 0,5 дюйма между версиями iOS. Но я думал, что 'viewDidLoad' был таким, что вы можете инициализировать свое представление до его появления и тот факт, что он вызван только один раз. И мне немного странно, что это отлично работает в более старых версиях ios, но не больше в 'iOS 8' – smitt04
Я думаю, что они переключают систему координат. Я устанавливал некоторые фреймы в viewDidLayoutSubviews, и когда я использую [UIScreen mainScreen] .bounds в качестве исходной системы координат, кажется, инвертируется. – artud2000