Представление представления из UIAlertController
переводит предупреждение в положение с ошибкой в верхнем левом углу экрана. iOS 8.1, устройство и симулятор.
Мы заметили это в приложении, когда пытаемся представить представление из текущего "самого верхнего" представления. Если UIAlertController оказывается самым верхним видом, мы получаем такое поведение. Мы изменили наш код, чтобы просто игнорировать UIAlertControllers, но я отправляю его, если другие попадают в ту же проблему (поскольку я ничего не мог найти).
Мы выделили это на простой тестовый проект, полный код внизу этого вопроса.
- Реализовать
viewDidAppear:
на контроллере представления в новом проекте Single View Xcode. - Представьте предупреждение
UIAlertController
. - Контроллер Alert немедленно вызывает
presentViewController:animated:completion:
для отображения и затем отклонения другого контроллера представления:
Когда presentViewController:...
анимация presentViewController:...
, UIAlertController переместится в верхний левый угол экрана:
Когда dismissViewControllerAnimated:
анимация dismissViewControllerAnimated:
предупреждение перемещается еще дальше в верхнее левое поле экрана:
Полный код:
- (void)viewDidAppear:(BOOL)animated {
// Display a UIAlertController alert
NSString *message = @"This UIAlertController will be moved to the top of the screen if it calls 'presentViewController:'";
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"UIAlertController iOS 8.1" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"I think that a Bug" style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
// The UIAlertController should Present and then Dismiss a view
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = self.view.tintColor;
[alert presentViewController:viewController animated:YES completion:^{
dispatch_after(0, dispatch_get_main_queue(), ^{
[viewController dismissViewControllerAnimated:YES completion:nil];
});
}];
// RESULT:
// UIAlertController has been moved to the top of the screen.
// http://i.imgur.com/KtZobuK.png
}
Есть ли что-либо в приведенном выше коде, вызывающем эту проблему? Существуют ли какие-либо альтернативы, которые позволили бы безболезненную презентацию представления из UIAlertController?
rdar://19037589
http://openradar.appspot.com/19037589