如何在iOS 15中使用scrollEdgeAppearance?

P. *_*sin 4 uinavigationbar uikit ios

这是Apple关于UINavigationBar的scrollEdgeAppearance的文档:

\n
\n

当导航控制器包含导航栏和滚动视图时,滚动视图的部分内容将显示在导航栏下方。如果滚动内容的边缘到达该栏,\nUIKit 将应用此属性中的外观设置。

\n

如果此属性的值为 nil,UIKit 将使用在 standardAppearance 属性中找到的设置,并修改为使用透明背景。\n如果没有导航控制器管理您的导航栏,UIKit 将忽略此属性并使用导航的标准外观酒吧。

\n

在使用 iOS 14 或更早版本的应用上运行时,此属性适用于\n具有大标题的导航栏。在 iOS 15 中,此属性适用于\n所有导航栏。

\n
\n

这是我的演示。我将 ViewController 嵌入到 UINavigationController 中,然后拖动 UITableView 并将其设置为 ViewController 视图的子视图。我将以下外观属性设置为 UINavigationBar:

\n
class ViewController: UIViewController {\n    @IBOutlet weak var tableView: UITableView!\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view.\n        \n        let redAppearance = UINavigationBarAppearance()\n        redAppearance.backgroundColor = .red\n        navigationController?.navigationBar.standardAppearance = redAppearance\n        \n        let greenAppearance = UINavigationBarAppearance()\n        greenAppearance.backgroundColor = .green\n        navigationController?.navigationBar.scrollEdgeAppearance = greenAppearance\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我认为初始导航栏应该是红色的,当我滚动表格视图时它应该变成绿色。但事实是恰恰相反。

\n

初始状态\n滚动状态

\n

我做了一些搜索,大多数人只是将standardAppearancescrollEdgeAppearance设置为同一个实例,或者将其中之一设置为nil,所以我对iOS 15中的这两个属性感到非常困惑。

\n

mat*_*att 6

你已经完全理解了,但是落后了。

navigationController?.navigationBar.scrollEdgeAppearance = greenAppearance
Run Code Online (Sandbox Code Playgroud)

意味着仅当可滚动视图一直向下滚动时导航栏才会呈绿色。这就是您在第一个屏幕截图中看到的内容。

一旦向上滚动一点,导航栏就会开始采用其标准外观,即红色。这就是您在第二个屏幕截图中看到的内容。