2014-09-04 6 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. 
    } 
} 

및 결과가

인 아이폰 OS 7

iOS7

아이폰 OS 8

iOS 8

,

어떤 통찰력도 인정 될 것입니다. 감사.

+6

'viewDidLoad'가 너무 이릅니다. 보기의 크기가 아직 제대로 설정되지 않았습니다. – rmaddy

+0

iOS 버전간에 '0.5'픽셀 차이가 생겼지 만 문제가 해결 된 것 같습니다. 하지만,'viewDidLoad'는 뷰가 나타나기 전에 뷰를 초기화 할 수 있고 실제로 한 번만 호출된다는 사실을 알았습니다. 그리고 이것은 좀 이상합니다. 이전 iOS 버전에서는 제대로 동작하지만'iOS 8'에서는 더 이상 작동하지 않습니다. – smitt04

+0

그들은 좌표계를 전환한다고 생각합니다. viewDidLayoutSubviews에서 일부 프레임을 설정했는데 기준 좌표계가 반전 된 것처럼 보이는 경우 [UIScreen mainScreen] .bounds를 사용할 때 – artud2000

답변

0

viewDidLoad에서 프레임 좌표를 가져 오는 것이 결코 신뢰할 수 없습니다. iOS7 vs iOS8에서 더 안정적으로 보였습니다. 좌표를 설정하거나 변경하는 가장 좋은 장소는 원하는 것에 따라 viewWillLayoutSubviews 또는 viewDidLayoutSubviews입니다.

관련 문제