4

If I run this code on an iPad (iOS 8) from a view controller:

MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc]init]autorelease];
controller.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:controller animated:YES completion:nil];

I get a fullscreen message composition view. But I see no documentation or reference anywhere of MFMessageComposeViewController ignoring its modal presentation style. Is this expected? Or am I missing something?

Undo
  • 25,519
  • 37
  • 106
  • 129
Tom Hamming
  • 10,577
  • 11
  • 71
  • 145

1 Answers1

4

Faced a similar issue recently targeting iOS8. It does seem like MFMessageComposeViewController ignores the modalPresentationStyle property. Strangely enough MFMailComposeViewController doesn't seem to have this issue. Anyways, to resolve it, I embedded the MFMessageComposeViewController inside a UIViewController and presented that instead. Below is the code to accomplish this:

var messageViewController = MFMessageComposeViewController()
messageViewController.messageComposeDelegate = self

let containerViewController = UIViewController()
containerViewController.view.addSubview(messageViewController.view)
messageViewController.willMoveToParentViewController(nil)
containerViewController.addChildViewController(messageViewController)
messageViewController.didMoveToParentViewController(containerViewController) 

containerViewController.modalPresentationStyle = .OverFullScreen
containerViewController.transitioningDelegate = self
presentViewController(containerViewController, animated: true, completion: nil)
Kachi
  • 3,609
  • 2
  • 23
  • 18
  • Successfully applied modal presentation in such way. It`s just unclear why you use nil in "messageViewController.willMoveToParentViewController(nil)" – Dren May 25 '16 at 13:18