Storyboard, NavigationController, Landscape Orientation и Scrollview Coordinate

Изправен съм пред проблем, който е причинен от магия за ориентиране, която не разбирам. Първо, използвам NavigationController, който зарежда ViewController. В този ViewController е ScrollView. Когато попитам за позицията на ScrollView, получавам грешни данни. Например: координатата x на ScrollView е 90 в създателя на интерфейса. Ако получа рамката на ScrollView програмно, тя връща 280. Всичко в приложението е настроено на пейзаж. В Info.plist, в резюмето, в изпълнението на ViewControllers, в създателя на интерфейса.

Направих няколко екранни снимки. Може би те помагат да се намери грешката.

Настройки в резюмето

Рамка в създателя на интерфейса на ScrollView

Рамка в изпълнението, където лентата е различна от създателя на интерфейса

Настройките на ViewController, които съдържат ScrollView

И всеки ViewController има това:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

Ако премахна NavigationController от Storyboard и оставя симулираните показатели да се изведат, тогава първият ViewController се променя на портрет в Storyboard.

Когато регистрирам размера на изгледа от NavigationController, той е в портрет

NSLog(@"frame %@", NSStringFromCGRect(self.view.frame));

Резултатът е 768x1024


person zeiteisen    schedule 21.08.2012    source източник
comment
И така, искате ли да е заключен в пейзаж?   -  person FaddishWorm    schedule 21.08.2012
comment
Опитвали ли сте да приложите всички персонализации на scrollView в метода viewWillApper:animated:?   -  person The iOSDev    schedule 21.08.2012
comment
@FaddishWorm, да, това е само пейзаж и това не е проблемът. Рамката на изгледите е объркана.   -  person zeiteisen    schedule 21.08.2012
comment
@AalokParikh, това решава проблема. Благодаря!   -  person zeiteisen    schedule 21.08.2012
comment
@zeiteisen Публикувах коментара си като отговор. Моля, приемете го като приет отговор :)   -  person The iOSDev    schedule 21.08.2012


Отговори (2)


Проблемът е в използвания метод, т.е. методът viewDidLoad:. По това време все още не са изчертани подизгледи и все още не са инициализирани рамки, така че проблемът е съгласен.

Вместо да използвате viewDidLoad:, използвайте viewWillAppear:animated: или viewDidAppear:animated:, което ще реши проблема вместо вас.

Приятно кодиране :)

person The iOSDev    schedule 21.08.2012

Мислех, че обикновено трябва да вземеш предвид ориентацията, когато изчисляваш x извън рамка, поради което те имат трансформации? iPhone SDK: ориентация (пейзажни и портретни изгледи)

Простото запитване към рамката за X стойност няма винаги да ви даде точни резултати.

person FaddishWorm    schedule 21.08.2012