iPad Ориентация / Проблема с размером кадра - PullRequest
2 голосов
/ 25 сентября 2010

В «View Did Load» я пытаюсь определить размер представления, чтобы я мог соответствующим образом определить размер подпредставления. Я хочу, чтобы он всегда растягивался по длине и ширине экрана независимо от ориентации.

quest *anview = [[quest alloc] initWithFrame: CGRectMake(50, 50, self.view.frame.size.width-100, self.view.frame.size.height-100)];
self.aquest=anview;

Но это всегда возвращает ширину 748 и высоту 1024, когда это должно возвращать противоположное, когда я в ландшафте. Я знаю, что вы не можете получить ориентацию на симуляторе, но это происходит и на устройстве. Когда я получу ориентацию:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
NSLog(@"device orientation:%d",orientation);

Я правильно понял ориентацию, но этот оператор журнала возвращает 748/1024 независимо от ориентации.

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

Кто-нибудь знает, что происходит? Это связано со мной, помещая это в метод viewdidLoad? Должен ли я положить его в viewWillAppear или viewDidAppear?

1 Ответ

12 голосов
/ 25 сентября 2010

Попробуйте использовать свойство bounds вместо frame .

Вид всегда создается в портретном режиме и затем поворачивается, даже если вы запускаете приложение в альбомной ориентации. Вы должны быть в состоянии сохранить растянувшееся подпредставление, установив его размер относительно размера портрета родителя и маски авторазмера на UIViewAutoresizingMaskFurableWidth | UIViewAutoresizingF FlexibleHeight , предоставляя shouldAutorotateToInterfaceOrientation: возвращаемое ДА за право YES для ориентации. Он также будет сохранять расстояние от верхнего и левого полей, если вы не добавите в маску другой UIViewAutoresizingF FlexibleMargin .

...