使用大型标题时,iOS 11滚动到顶部无法正常工作

Bra*_*m-N 4 statusbar uinavigationbar ios swift large-title

当使用大标题和攻丝状态栏滚动到顶部UIScrollViewUITableView(也可能UICollectionView,没有测试),它总是过得有点过分.

我已启用刷新功能TableView,当点击状态栏时,它会显示为这样,并保持这种状态直到我点击屏幕.

在此输入图像描述

我有一个ScrollView在另一个ViewController,如果我点击状态栏那里它也滚动了一点点太远,使导航栏太高.当我点击某处或滚动一点点时,这也会恢复正常.

正常: 在此输入图像描述

点击状态栏后: 在此输入图像描述

这也只有在我激活了大型标题时才会发生,使用普通标题一切正常.

任何想法如何解决这一问题?

如何重新创建:

  1. 创建一个具有导航控制器和一个新的项目UIViewControllerTableView内.
  2. 设置导航控制器以选择大型标题.半透明.设置标题UIViewController
  3. 设置约束TableView以固定到边缘ViewController
  4. 为创建出口TableViewViewController
  5. 实现委托并设置多个行,例如100
  6. 启动应用
  7. 向下滚动,以便大标题成为正常标题
  8. 点按状态栏,tableView滚动到顶部

现在标题不在它应该的位置,如果你现在向上或向下滚动一点点,它会快速回到正常位置.

ViewController 码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
    }

}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 100
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TestCell", for: indexPath)

        return cell
    }

}
Run Code Online (Sandbox Code Playgroud)

Bra*_*m-N 7

好的,所以我找到了问题发生的原因,但没有找到如何解决这个问题.

如果您正在使用大型标题和UITableViewController,导航栏半透明设置为关闭,则会出现问题.当你转回半透明时问题消失了.

如果您在普通的UIViewController中使用TableView,则始终会出现问题.

编辑

如果您使用半透明导航栏,则设置"extendedLayoutIncludesOpaqueBars = true"可以解决问题!

类似的问题:iOS 11中的UIRefreshControl()Glitchy效果