【问题标题】:iOS 8 Share Extension custom view controller sizeiOS 8 Share Extension 自定义视图控制器大小
【发布时间】:2015-01-14 18:02:53
【问题描述】:

我正在为我的 iOS 应用程序构建一个共享扩展,但我不能使用默认的 SLComposeServiceViewController,所以我(在故事板中)创建了一个基本的 UIViewController 并嵌入到导航控制器中。我可以展示它、关闭它等等,但它总是全屏显示。我想让它看起来更像一个对话框。 我试过在我的视图控制器上使用self.preferredContentSize,在Interface Builder 的导航控制器上试过Use Preferred Explicit Size,但它不起作用。

【问题讨论】:

  • 你能描述更多关于如何隐藏默认 SLComposeServiceViewController 的信息吗?我也在研究这种类型的功能。我想自定义 SLComposeServiceViewController。
  • 谢谢,@MatrosovAlexander。
  • 将您的共享扩展定义为 UIViewController 的子类,而不是 SLComposeServiceViewController。为此,请让 Xcode 创建一个共享扩展,然后在“yourShareName.h”中编辑它的子类类型

标签: ios8 ios-app-extension ios8-share-extension


【解决方案1】:

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

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

  1. 在您的自定义视图控制器中,您可以参考 self.extensionContext 来读取并完成共享操作。参考模板ShareViewExtension中的代码

【讨论】:

  • 这仍然是最好的方法吗?似乎比其他解决方案更好,但仍然有点 hackish :)
  • 谢谢!工作正常! extensionContext 显然存在于每个 UIViewController
  • 如何在没有导航的情况下关闭视图控制器?当用户点击工具栏上的取消按钮时,如果您隐藏该工具栏,当用户点击我们的应用程序时如何再次显示?
  • [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil]; 是这个吗?有效吗?
【解决方案2】:

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

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

这是一张图片:

【讨论】:

  • 对不起,你是怎么做到的?这就是我没有成功的做法:我有一个 viewController 作为我的初始 VC。这是隐藏的。在这个 VC 的 awakeFromNib 上,我对另一个 viewController 执行了 performSegue,但是第二个总是显示全屏。愿意解释我必须遵循的步骤吗?谢谢
  • 第一个视图控制器应该包含您希望可见的较小的视图控制器(不要继续使用第二个,只需将它放在第一个内。)
  • 如果更改基本类型,如何引用共享文本(即contentText
  • 我很确定如果您使用的是自定义 UIViewController,contentText 与使用 SLComposeServiceViewController 的方式不同。您必须使用 IBOutlet 访问文本字段或类文件中的任何其他 UI 组件。
  • 你在 UIViewControler 上有一个属性 extensionContext。数据等待他们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多