UIActivityViewController 在 iOS 15 时变为空白

UIActivityViewController becomes blank on iOS 15

我有一个 iOS 应用程序类似于 Apple 的照片应用程序,它也有一个用于共享照片的“共享”按钮,以前运行良好。代码如下(为简单起见,我将分享内容改为字符串):

@objc func shareButtonTapped()
{
    let vc = UIActivityViewController(activityItems: ["www.apple.com"], applicationActivities: nil);
    if let pop = vc.popoverPresentationController
    {
        pop.sourceView = someView;
        pop.sourceRect = shareButton.frame;
    }
    self.present(vc, animated: true, completion: nil);
}

但是当我的 iPhone 升级到 iOS 15 时,出现的 UIActivityViewController 是不可见的。我附上操作视频: enter link description here 仔细观察,其实UIActivityViewController是有弹窗的,只不过已经变得近乎透明了

然后,我加了一条语句,特意设置了它的view的背景色:

@objc func shareButtonTapped()
{
    let vc = UIActivityViewController(activityItems: ["www.apple.com"], applicationActivities: nil);
    vc.view.backgroundColor = UIColor.systemBackground;
    if let pop = vc.popoverPresentationController
    {
        pop.sourceView = someView;
        pop.sourceRect = shareButton.frame;
    }
    self.present(vc, animated: true, completion: nil);
}

操作视频如下: enter link description here

这段代码很简单,也很标准。我不知道为什么会这样? 希望有人能帮忙。提前致谢!


事实上,我在派生自 UICollectionViewCell 的 class 中定义了 shareButton:

class AssetPreviewCell: UICollectionViewCell, UIScrollViewDelegate, PHLiveViewDelegate, UINavigationControllerDelegate
{
    //....
}

完整代码为:

@objc func shareButtonTapped()
{
    guard let svc = self.findViewController() else { return }

    let vc = UIActivityViewController(activityItems: ["www.apple.com"], applicationActivities: nil);
    if let pop = vc.popoverPresentationController
    {
        pop.sourceView = someView;
        pop.sourceRect = shareButton.frame;
    }
    svc.present(vc, animated: true, completion: nil);
}

func findViewController() 是来自 enter link description here

的方法

编辑:

我在 'Share' 按钮旁边有一个 'Albums' 按钮。当点击 'Albums' 按钮时,我会显示另一个视图控制器,用于根据用户 select 或 deselect 将当前照片添加到相册或从相册中删除当前照片。这个视图控制器通常安静地呈现。操作视频在enter link description here。所以我认为问题只是来自 UIActivityViewController 或其他东西。

我找到了答案。问题是因为我出于某种原因重写了UIActivityViewController的viewDidLoad函数引起的:

override open func viewDidLoad()
{
    super.viewDidLoad();
    a_var += 1;
}

这会在 iOS15 上造成问题,但在 iOS14 或 iOS13 上运行良好。

现在我覆盖了 viewDidAppear(_) 而问题消失了:

override open func viewDidAppear(_ animated: Bool)
{
    super.viewDidAppear(animated);
    a_var += 1;
}

ps:@mczmma 是我的另一个帐户。此帐户仅限提问。我不知道原因。

在我的用例中对我有用的只是将 sourceView 从

let shareAll = [textView.text]
let activityViewController = UIActivityViewController(activityItems: shareAll, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
self.present(activityViewController, animated: true, completion: nil)

let shareAll = [textView.text]
let activityViewController = UIActivityViewController(activityItems: shareAll, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = textView
self.present(activityViewController, animated: true, completion: nil)

所以在 iPad 上,分享显示在 textView 上方,并且它在 iPhone.

上正常工作