让 UIActivityViewController (share) 以它在 iPhone 上显示的方式在 iPad 上显示?

Posted

技术标签:

【中文标题】让 UIActivityViewController (share) 以它在 iPhone 上显示的方式在 iPad 上显示?【英文标题】:Get UIActivityViewController (share) to show on iPad in the way it shows on iPhone? 【发布时间】:2020-08-07 18:59:32 【问题描述】:

我有一个分享按钮。当点击分享按钮时,视图控制器运行如下代码:

类视图控制器:UIViewController

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view.


@IBOutlet weak var popOverView: UIView!
@IBOutlet weak var shareButton: UIButton!
@IBAction func share()

    let text = "Sharing."
    if let url = URL(string: "https://www.apple.com")
    
        let items = [text,url] as [Any]
        let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
        if let popoverViewController = activityViewController.popoverPresentationController
        
            popoverViewController.sourceView = popOverView
            // popoverViewController.sourceRect = popOverView.frame
        
        present(activityViewController, animated: true, completion: nil)
        print(activityViewController.popoverPresentationController?.sourceView)
    

这可行,但会产生这个:

当我想要这样的东西时,因为要共享的内容不会在这个视图控制器上:

如何获得我想要的屏幕?

【问题讨论】:

【参考方案1】:

我认为你需要这样做:

sharingViewController.modalPresentationStyle = .popover

在设置 sharingViewController.popoverPresentationController?.sourceView 属性之前。在您执行此操作之前,sharingViewController.popoverPresentationController 为零。

【讨论】:

尝试添加self.descriptionVC.popoverPresentationController!.permittedArrowDirections = .anyself.descriptionVC.popoverPresentationController!.sourceRect = myRect,其中myRect是弹出框应该从中“弹出”的UI元素的CGRect(在self.view的坐标系中)。 如果可行,请在另一条评论中告诉我,我将编辑我的原始答案。 抱歉,描述VC/myRect是什么? @guywithmazda ,iPhone 风格的弹出窗口在 iPad 上是不可能的。 @MontanaBurr,我从我的一个应用程序中复制并粘贴了一些代码,但我忘记更改视图控制器名称以匹配您使用的名称。无论如何,既然您已经更改了问题标题并修改了问题本身,我可以看到这不会给您想要的外观。【参考方案2】:

很遗憾,这在 iPad 上不可能

很抱歉带来坏消息!


如果您真的、真的想要那种外观,您必须制作一个完全自定义的视图控制器并放置在那里(即不连接到 UIActivityViewController),当然这将是不切实际的工作量。

【讨论】:

以上是关于让 UIActivityViewController (share) 以它在 iPhone 上显示的方式在 iPad 上显示?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIActivityViewController 共享 PHAsset?

iOS 8.3:UIActivityViewController 显示无关的行

iOS 8.3:UIActivityViewController 显示无关的行

如何让Markdown图片居中

请教如何让UIActivityIndicatorView永远居中

怎样让chrome使用gpu