在 iOS15 上将 UIActivityViewController 共享模式导航栏更改为不透明

Posted

技术标签:

【中文标题】在 iOS15 上将 UIActivityViewController 共享模式导航栏更改为不透明【英文标题】:Changing UIActivityViewController share modal navigation bar to opaque on iOS15 【发布时间】:2021-11-18 07:35:13 【问题描述】:

我在 ios 15 上的共享模式控制器中获得了一个透明的导航栏。但是导航栏的外观已经正确设置,并且在应用程序的任何部分都没有更改。此问题仅发生在 uiactivity 共享模式中,而不是全部发生。

外观设置

 // AppDelegate.swift

if #available(iOS 13.0, *) 
        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
        appearance.backgroundColor = .white
        appearance.shadowImage = nil
        appearance.shadowColor = .clear
        appearance.titleTextAttributes = [
            NSAttributedString.Key.font: UIFont.BananaGrotesk(weight: .semibold, size: 16.0),
            NSAttributedString.Key.foregroundColor: UIColor.Function.black
        ]
        navBarAppearance.barTintColor = .white
        navBarAppearance.standardAppearance = appearance
        navBarAppearance.scrollEdgeAppearance = appearance
        navBarAppearance.compactAppearance = appearance
     else 
        navBarAppearance.isTranslucent = false
        navBarAppearance.backgroundColor = .white
        
        //  Remove bottom line aka shadow
        navBarAppearance.shadowImage = UIImage()
        navBarAppearance.setBackgroundImage(UIImage(), for: .default)
        navBarAppearance.tintColor = .clear
        navBarAppearance.layer.shadowOpacity = 0
        //  Update bar title font
        navBarAppearance.titleTextAttributes = [
            NSAttributedString.Key.font: UIFont.BananaGrotesk(weight: .semibold, size: 16.0),
            NSAttributedString.Key.foregroundColor: UIColor.Function.black
        ]
    
 

我试过了,但什么也没做。

func presentShareActivity(items: [Any]) 
    //let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)
    let activityVC = UIActivityViewController(activityItems: ["test share copy"], applicationActivities: nil)
    
    if #available(iOS 13.0, *) 
        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
        appearance.backgroundColor = .white
        appearance.shadowImage = nil
        appearance.shadowColor = .clear
        appearance.titleTextAttributes = [
            NSAttributedString.Key.font: UIFont.BananaGrotesk(weight: .semibold, size: 16.0),
            NSAttributedString.Key.foregroundColor: UIColor.Function.black
        ]
        activityVC.navigationItem.scrollEdgeAppearance = appearance
        activityVC.navigationItem.standardAppearance = appearance
        activityVC.navigationItem.compactAppearance = appearance
        activityVC.navigationController?.navigationBar.isTranslucent = false
        activityVC.navigationController?.navigationBar.scrollEdgeAppearance = appearance
        activityVC.navigationController?.navigationBar.standardAppearance = appearance
        activityVC.navigationController?.navigationBar.compactAppearance = appearance
    
    present(activityVC, animated: true)

截图

导航栏是透明的,但在滚动时变为不透明。我希望这是不透明的

有趣的是,下面的照片使用相同的代码,但导航栏不透明

【问题讨论】:

您好,可能与您的代码中设置的外观有冲突。您是否尝试在将导航定义为透明的所有地方临时评论?这应该可以解释为什么它不会每次都附加。 @Hikosei 感谢您的建议。帖子上的内容已经是我的应用程序中所有与外观相关的代码。它实际上只是在 Appdelegate 上,然后在活动表示方法上,无论它是否存在,都没有任何变化。 你能分享一个示例项目吗? 【参考方案1】:

试试这个:

activityVC.view.backgroundColor = UIColor.systemBackground

它对我有用。 ?

【讨论】:

以上是关于在 iOS15 上将 UIActivityViewController 共享模式导航栏更改为不透明的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS15 上将 UIActivityViewController 共享模式导航栏更改为不透明

在 iOS 上将 Wordpress JSON 解析为 UITableView

在完成活动之前关闭 UIActivityView

AppDelegate 中的 UIActivityView 使用协议和委托

如何在iOS上将字符串拆分为子字符串?

UIActivityView 将文件附加到电子邮件