【问题标题】:iOS 11 navigation bar transparent with large titlesiOS 11 导航栏透明并带有大标题
【发布时间】:2018-04-29 02:40:07
【问题描述】:

我有 uinavigationbar 的默认首选项:

UINavigationBar.appearance().barTintColor = .red
        UINavigationBar.appearance().titleTextAttributes = [ NSAttributedStringKey.foregroundColor:#colorLiteral(red: 1, green: 0.99997437, blue: 0.9999912977, alpha: 1)]
        if #available(iOS 11.0, *) {
            UINavigationBar.appearance().largeTitleTextAttributes = [ NSAttributedStringKey.foregroundColor:#colorLiteral(red: 1, green: 0.99997437, blue: 0.9999912977, alpha: 1)]
        }
        UINavigationBar.appearance().isTranslucent = false
        UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 0.99997437, blue: 0.9999912977, alpha: 1)

结构:UINaviagtionController -> PostsTableViewController -> PostTableViewController

我想在 PostsViewController 上有大的导航栏(背景颜色不透明),在 PostViewController 上有透明的导航栏。

在 PostTableViewController 我添加:

self.navigationController?.navigationBar.backgroundColor = UIColor.clear
        self.navigationController?.navigationBar.barTintColor = .clear

        self.automaticallyAdjustsScrollViewInsets = false
        //self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        //self.navigationController?.navigationBar.shadowImage = UIImage()
        if #available(iOS 11.0, *) {
            print("asd")
            self.tableView.insetsContentViewsToSafeArea = false
            self.tableView.contentInsetAdjustmentBehavior = .never
        } else {
            self.automaticallyAdjustsScrollViewInsets = false
        }

导航栏是黑色的。我不明白如何使它透明...

更新:

git hub 仓库:https://github.com/Mazorati/testnavbar

我设置 isTranslucent = true,但大导航也变得透明。只有默认导航是可以的。

但我希望导航栏颜色不透明,所以:

self.navigationController?.view.backgroundColor = .red
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .automatic

结果:

3D 图层:

【问题讨论】:

  • 这与我的问题无关。我使用推送转场
  • 没关系。相同的视图堆栈,不同的过渡。你试过了吗?
  • @Mazorati 你能解决这个问题吗?

标签: ios swift uinavigationbar


【解决方案1】:

你试过把它改成半透明的吗?

self.navigationController?.navigationBar.isTranslucent = true

更新:

您必须记住,导航栏属于 UINavigationController,其中包含视图,因此当您将其更改为一个时,它会全部更改。

解决方案是在第二个视图控制器的 viewWillAppear 方法中将其更改为半透明,并在 viewDidDissapear 方法中将其更改为不透明。使用 viewWill 和 viewDid 出现方法,直到找到适合您需要的方法。

【讨论】:

  • 谢谢。检查我对这篇文章的更新。 PostsViewController 大导航现在没有背景了……怎么给这个加背景?
  • 我更新了我的回复,请检查它是否符合您的要求
【解决方案2】:

试试这个,这会让你的导航栏变得透明。

    let img = UIImage()
    navigationController?.navigationBar.shadowImage = img
    navigationController?.navigationBar.setBackgroundImage(img, for: .default)

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 2018-04-14
    • 2018-03-04
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2016-12-20
    相关资源
    最近更新 更多