iOS 6 - XCode 4.5.1 - симулятор iPad - программно получает неправильное разрешение

Почему симулятор Ipad в XCode 4.5.1 показывает неправильный размер при программной проверке?

MainViewController.m

- (void)viewDidLoad{
    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor redColor]];

    NSLog(@"self.view width : %f",self.view.frame.size.width);
    NSLog(@"self.view height : %f", self.view.frame.size.height);

    mTextView  =   [[UITextView alloc] initWithFrame:CGRectMake(10.0, 10.0, self.view.frame.size.width - 20, self.view.frame.size.height/2)];
    [self.view addSubview:mTextView];
}

и я получаю вывод как

self.view width : 320.000000
self.view height : 548.000000

Моя спецификация проекта

  1. Универсальный проект
  2. таргетинг на iOS 6.0
  3. Я абсолютно уверен, что при создании MainViewController я установил флажок «targeted for ipad».
  4. Не знаю, важно ли это, но "с xib для пользовательского интерфейса" не было отмечено.

А вот скрин с текствью добавлен

введите здесь описание изображения


person Krishnabhadra    schedule 24.10.2012    source источник


Ответы (2)


Попробуйте подождать до:

- (void)viewWillAppear

перед установкой рамки вашего UITextView. Согласно этот пост, до этого у вас не будет допустимой геометрии для вашего представления.

person EarlyRiser    schedule 24.10.2012
comment
Да, он работает правильно, когда я устанавливаю фрейм в viewWillAppear. Но что меня удивляет, так это то, что раньше я выполнял много настроек представления в viewDidLoad и никогда не сталкивался с этим. Это новое изменение, скажем, в iOS 6? - person Krishnabhadra; 24.10.2012
comment
Я так не думаю. Каковы размеры представления в конструкторе интерфейсов? - person EarlyRiser; 24.10.2012
comment
Я не использовал конструктор интерфейсов. Как я уже сказал в вопросе, опция с xib для пользовательского интерфейса не отмечена. - person Krishnabhadra; 24.10.2012
comment
Хорошо, я думаю, если у вас есть xib, размеры могут быть получены из него на этапе viewDidLoad, а также если вы создали свой viewController с помощью - (id)initWithFrame:(CGRect)frame, то вы можете увидеть действительные значения на этом этапе. - person EarlyRiser; 24.10.2012
comment
Я думаю, вы неправильно поняли UIViewController и UIView, UIViewController не имеет метода initWithFrame. В любом случае, я принимаю ваш ответ, так как он исправил проблему для меня. - person Krishnabhadra; 24.10.2012

Попробуйте этот код, чтобы определить, какое устройство понимает ваш компьютер:

NSRange*  pointRange = [[[UIDevice currentDevice] model] rangeOfString:@"iPad" options:0];

if (pointRange.location == NSNotFound) {

    NSLog(@"iPhone");
}
else

  {
    NSLog(@"iPad");

}
person Mutawe    schedule 24.10.2012