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.
上正常工作
我有一个 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.
上正常工作