我正在创建一个共享扩展程序,以便将Youtube视频分享到我的应用程序中,并且很难顺利呈现我的自定义UI。我想要在视觉上类似于Facebook的扩展程序,显示缩略图和视频标题,而不是仅包含原始Youtube URL的默认视图控制器。 我的第一次尝试是编辑MainInterface故事板ShareViewController,但这样做简要地显示了我的自定义界面,并且默认的UI布局得到了“覆盖”。所以我最终添加了另一个带有我的UI的视图控制器到故事板,并在我添加的ShareViewController中添加了
override func presentationAnimationDidFinish() {
super.presentationAnimationDidFinish()
DispatchQueue.main.async {
self.pushConfigurationViewController(customVC)
}
显而易见的问题是,在推送自定义控件之前,我仍然可以看到默认的View Controller。 那么问题是如何在共享扩展启动时立即显示我的自定义UI?我在.plist中尝试过 NSExtensionPrincipalClass ,但没有任何正面结果
提前致谢
答案 0 :(得分:2)
嗯,挖掘和搜索更多我发现我必须使 ShareViewController 成为 UIViewController 的子类而不是** SLComposeServiceViewController **。当我在故事板上设计我的界面时,我按原样离开了.plist,但是必须考虑到VC在这里描述的全屏问题:iOS 8 Share Extension custom view controller size
我在那里接受@Dale答案来解决它。
答案 1 :(得分:0)
这些常规步骤对我有用,而无需使用SLComposeServiceViewController
(here's the code at the commit when it was implemented)。最后的图片显示了我们的结果,但是第6步可以是任何内容,而不仅仅是表格。
步骤:
( code )将ShareViewController
更改为简单的UIViewController
( code )为ShareViewController
(故事板)将容器视图添加到ShareViewController
(故事板)添加导航控制器
(故事板)在ShareViewController
的容器视图中嵌入导航控制器
在导航控制器中自定义视图控制器(例如,请参见this SO thread )
ShareViewController
更改为简单的UIViewController
import UIKit
class ShareViewController: UIViewController {
// ^^^^^^^^^^^^^^^^
ShareViewController
添加模糊效果 // ShareViewController continued from Step 1.
override func viewDidLoad() {
super.viewDidLoad()
// https://stackoverflow.com/questions/17041669/creating-a-blurring-overlay-view/25706250
// only apply the blur if the user hasn't disabled transparency effects
if UIAccessibilityIsReduceTransparencyEnabled() == false {
view.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
//always fill the view
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.insertSubview(blurEffectView, at: 0)
} else {
view.backgroundColor = .black
}
// Do any additional setup after loading the view.
}
ShareViewController
从对象库中将Container View
拖到情节提要中的ShareViewController
中,然后调整尺寸。例如:
将导航控制器从对象库拖到情节提要。
ShareViewController
的容器视图中从ShareViewController
的容器视图中拖动到导航控制器,然后从菜单中选择“ 嵌入”。应该看起来像这样:
我的结果:
答案 2 :(得分:0)
根据Apple的说法,您可以在创建扩展程序后直接停用默认VC。请参阅“使用Xcode共享模板”部分下的注释。