У меня была проблема с получением модальности нестандартного размера по центру, пока я не выяснил, что было изначально установлено для ViewController.view.superview.frame
. Он определяется на основе типа UIModalPresentation. superview.center
даже не требуется (насколько показывает мой тест).
Кроме того, я установил координаты динамически, используя [UIScreen mainScreen].applicationFrame
, пока поддерживаю только альбомную ориентацию. Вы должны выполнить условную проверку для поддержки как портретной, так и альбомной ориентации, перевернув значения X / Y и Высота / Ширина.
Вот мое первое рабочее решение для iOS 6.0:
ViewController.modalPresentationStyle = UIModalPresentationFormSheet;
ViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:ViewController animated:YES completion:nil];
ViewController.view.superview.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
ViewController.view.superview.frame = CGRectMake(
// Calcuation based on landscape orientation (width=height)
([UIScreen mainScreen].applicationFrame.size.height/2)-(320/2),// X
([UIScreen mainScreen].applicationFrame.size.width/2)-(320/2),// Y
320,// Width
320// Height
);
А потом я посмотрел на предыдущий ответ и повернул лицо ладонью. Немного сократил мое решение, заменив последнюю строку на:
ViewController.view.superview.bounds = CGRectMake(0, 0, 320, 320);
РЕДАКТИРОВАТЬ для окончательного решения и замечаний.