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.
问问题
8724 次
2 回答
18
这可以使用情节提要轻松直接地完成,但不是很明显。不需要多个视图控制器。
- 创建您自己的从 UIViewController 继承的视图控制器类。
- 在 MainInterface.storyboard 中,将视图控制器的类更改为您的新类
- 在情节提要中,您可以简单地绘制您的 UI - 但这是诀窍。您需要了解情节提要视图将填满屏幕,并且默认情况下,该视图已创建具有清晰的背景。您只需要在主视图中创建一个视图。您可以设置自动布局约束来调整此视图的大小并定位它(例如水平和垂直居中)。您还可以使用大小类来使此内部视图在紧凑布局上填满屏幕。通过控件拖动以通常的方式将控件从内部视图连接到视图控制器
- 在您的自定义视图控制器中,您可以参考 self.extensionContext 来阅读并完成共享操作。参考模板 ShareViewExtension 中的代码
于 2016-05-22T09:34:46.470 回答
12
好的,我花了很长时间试图弄清楚这一点。无论出于何种原因,您都无法像使用操作扩展一样设置视图大小。它总是全屏显示(即使在 iPad 上)。所以解决这个问题的方法是制作多个视图控制器。隐藏第一个视图控制器,这样用户就不会注意到存在全屏视图控制器(是的,在共享扩展中,第一个隐藏的视图控制器实际上完全隐藏了,所以用户甚至不知道它被呈现) . 然后使用隐藏的视图控制器呈现您的实际视图控制器。这样你就可以以任何你喜欢的方式呈现它并设置大小等。
在我的例子中,我实际上让我的隐藏视图控制器有一个 UIEffectView,这样我就可以在背景中有一个很好的模糊动画,然后在它上面显示我的实际视图控制器。
这是一张图片:
于 2015-01-29T20:15:40.183 回答