Я пытался понять, почему мое модально представленное изображение не отображается под прозрачной строкой состояния._Window.rootViewController - это UILayoutContainerView, часть представления Tab, которое является первым представлением респондента, определенным в раскадровке.
Когда сообщение presentViewController отправляется rootViewController, который я вижу в стеке вызовов,
UIWindowController transition: fromViewController: toViewController: target: didEndSelector:
вызывает setFrame моего coverImageViewController с 0,20,320,460, несмотря на то, что rootViewController и coverImageViewController имеют фрейм 0,0,320,480.Это означает, что изображение в конечном итоге отображается под строкой состояния, сжатое на 20 пикселей.
Я подозреваю, что UILayoutContainerView каким-то образом изменяется при переходе, но я не уверен, как это подтвердить или как остановитьэто.
Любая помощь будет оценена.Спасибо.
Это источник:
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
// Get the cover image (320x480) from the main bundle and put it in an image view.
UIImage *coverImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"CoverPage.png" ofType:nil]];
UIImageView *coverImageView = [[UIImageView alloc] initWithImage:coverImage];
// Instantiate and set up the coverImageViewController.
coverImageViewController = [[UIViewController alloc] init];
// Desperate attempts to make image display below the status bar.
[coverImageViewController setModalPresentationStyle:UIModalPresentationFullScreen];
[coverImageViewController wantsFullScreenLayout];
[_window.rootViewController wantsFullScreenLayout];
[coverImageViewController setView:coverImageView];
// Make the window visible. Without a visible window the modal view won't come up.
[_window makeKeyAndVisible];
// At this point I am sure that both the rootViewController and the coverImageViewController frames are 0,0,320,480
// Display the coverImageViewController modally.
[self.window.rootViewController presentViewController:coverImageViewController animated:NO completion:nil];
}
Я создал тестовый проект на основе панели вкладок, в который я поместил тот же код в метод didFinishLaunchingWithOptions appDelegate.m.
У него та же проблема.
Я запускаю приложение с черной прозрачной строкой состояния и изображением Default.png с характерным рисунком, которое дает понять, что оно отображается под строкой состояния.
После вызова didFinishLaunching presentViewController становится ясно, что изображение обложки того же шаблона уменьшено на 20 пикселей (я также подтверждаю это с помощью вывода NSLog) и показано ниже, а не под строкой состояния.
Надеюсь, кто-нибудьзнает, почему presentViewController делает это и как остановить это без лишних слов.
Еще раз спасибо.Teo
Ссылка на тестовый проект: http://dl.dropbox.com/u/1792284/ModalSplashTest.zip