2014-09-04 8 views
1

У меня, похоже, возникают проблемы с системой координат 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

iOS7

IOS-8

iOS 8

Любое понимание будет оценено по достоинству. Благодарю.

+6

'viewDidLoad' слишком скоро. Размер представления еще не установлен правильно. – rmaddy

+0

Это, казалось, исправить, хотя теперь я получаю разницу в размере 0,5 дюйма между версиями iOS. Но я думал, что 'viewDidLoad' был таким, что вы можете инициализировать свое представление до его появления и тот факт, что он вызван только один раз. И мне немного странно, что это отлично работает в более старых версиях ios, но не больше в 'iOS 8' – smitt04

+0

Я думаю, что они переключают систему координат. Я устанавливал некоторые фреймы в viewDidLayoutSubviews, и когда я использую [UIScreen mainScreen] .bounds в качестве исходной системы координат, кажется, инвертируется. – artud2000

ответ

0

Невозможно получить координаты кадра от viewDidLoad. Это просто казалось более надежным в iOS7 и iOS8. Лучшее место, которое я нашел для установки или изменения координат, находится в viewWillLayoutSubviews или viewDidLayoutSubviews в зависимости от того, что вы хотели.

Смежные вопросы