29

I'm building a share extension for my iOS app and I can't use the default SLComposeServiceViewController, so I created (in the storyboard) a basic UIViewController and embedded in a navigation controller. I get to present it, dismiss it etc but it's always full screen. I would like to make it look more like a dialog. I have tried using self.preferredContentSize on my view controller, tried Use Preferred Explicit Size on the navigation controller in Interface Builder, but it doesn't work.

4

2 回答 2

18

这可以使用情节提要轻松直接地完成,但不是很明显。不需要多个视图控制器。

  1. 创建您自己的从 UIViewController 继承的视图控制器类。
  2. 在 MainInterface.storyboard 中,将视图控制器的类更改为您的新类
  3. 在情节提要中,您可以简单地绘制您的 UI - 但这是诀窍。您需要了解情节提要视图将填满屏幕,并且默认情况下,该视图已创建具有清晰的背景。您只需要在主视图中创建一个视图。您可以设置自动布局约束来调整此视图的大小并定位它(例如水平和垂直居中)。您还可以使用大小类来使此内部视图在紧凑布局上填满屏幕。通过控件拖动以通常的方式将控件从内部视图连接到视图控制器

示例故事板

  1. 在您的自定义视图控制器中,您可以参考 self.extensionContext 来阅读并完成共享操作。参考模板 ShareViewExtension 中的代码
于 2016-05-22T09:34:46.470 回答
12

好的,我花了很长时间试图弄清楚这一点。无论出于何种原因,您都无法像使用操作扩展一样设置视图大小。它总是全屏显示(即使在 iPad 上)。所以解决这个问题的方法是制作多个视图控制器。隐藏第一个视图控制器,这样用户就不会注意到存在全屏视图控制器(是的,在共享扩展中,第一个隐藏的视图控制器实际上完全隐藏了,所以用户甚至不知道它被呈现) . 然后使用隐藏的视图控制器呈现您的实际视图控制器。这样你就可以以任何你喜欢的方式呈现它并设置大小等。

在我的例子中,我实际上让我的隐藏视图控制器有一个 UIEffectView,这样我就可以在背景中有一个很好的模糊动画,然后在它上面显示我的实际视图控制器。

这是一张图片: 在此处输入图像描述

于 2015-01-29T20:15:40.183 回答