Подтвердить что ты не робот

Размер контроллера пользовательского представления iOS 8 Share Extension

Я создаю расширение для моего приложения iOS, и я не могу использовать значение по умолчанию SLComposeServiceViewController, поэтому я создал (в раскадровке) базовый UIViewController и встроен в контроллер навигации. Я могу представить его, отклонить его и т.д., Но он всегда полный экран. Я бы хотел, чтобы он больше напоминал диалог. Я попытался использовать self.preferredContentSize на моем контроллере представления, попробовал Use Preferred Explicit Size на контроллере навигации в Interface Builder, но он не работает.

4b9b3361

Ответ 1

Это можно сделать легко и непосредственно с помощью раскадровки, но это не сразу становится очевидным. Нет необходимости в нескольких контроллерах просмотра.

  • Создайте свой собственный класс контроллера класса, наследующий от UIViewController.
  • В MainInterface.storyboard измените класс контроллера вида на новый класс
  • В раскадровке вы можете просто нарисовать свой интерфейс, но вот трюк. Вам нужно понять, что представление раскадровки заполнит экран, и по умолчанию представление уже создано с четким фоном. Вам просто нужно создать представление внутри основного вида. Вы можете установить ограничения макета для размера этого представления и расположить его (например, в центре по горизонтали и по вертикали). Вы также можете использовать классы размера, чтобы заставить это внутреннее представление заполнить экран на компактных макетах. Подключайте элементы управления из внутреннего вида к контроллеру просмотра обычным способом путем перетаскивания элементов управления

Пример раскадровки

  1. В пользовательском контроллере просмотра вы можете ссылаться на self.extensionContext для чтения и завершения действия share. См. Код в шаблоне ShareViewExtension

Ответ 2

Хорошо, я долго искал это. По какой-либо причине вы не можете установить размер представления, как вы можете, с расширением действия. Он всегда будет работать в полноэкранном режиме (даже на iPad). Таким образом, можно сделать несколько контроллеров. Сделать первый контроллер просмотра скрытым, чтобы пользователь не заметил, что присутствует полноэкранный контроллер представления (и да, в расширении общего доступа первый скрытый контроллер представления фактически скрывает полностью, чтобы пользователь даже не знал, что он был представлен), Затем представьте свой фактический контроллер просмотра, используя контроллер скрытого представления. Таким образом, вы можете представить его любым способом, как вам нравится, и установить размер и т.д.

В моем случае я на самом деле сделал мой скрытый контроллер представления UIEffectView, поэтому у меня может быть приятная анимация размытия в фоновом режиме, а затем представить мой фактический контроллер представления над ним.

Вот фотография: enter image description here