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

问题描述 投票:2回答:3

当使用大型标题并点击状态栏滚动到UIScrollViewUITableView的顶部(可能还有UICollectionView,还没有测试过),它总是有点太过分了。

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

enter image description here

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

正常:enter image description here

点击状态栏后:enter image description here

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

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

如何重新创建:

  1. 使用导航控制器和UIViewController创建一个新项目,里面有TableView
  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
    }

}
ios swift uinavigationbar statusbar large-title
3个回答
7
投票

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

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

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

编辑

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

类似的问题:UIRefreshControl() in iOS 11 Glitchy effect


0
投票

经过几个小时的测试,我找到了一个适用于UIViewController的解决方案。

在UITiewController中使用UITableView,你应该:

  • 在viewDidLoad中设置extendedLayoutIncludesOpaqueBars = true
  • 在storyboard pin table中使用常量= 0查看topview top的顶部约束(当导航栏是半透明时,tableView将位于导航栏和状态栏下)

之后,如果您点击状态栏,则表格视图会在正确的位置停止。

enter image description here


0
投票

我已经通过滚动到顶部将contentOffset设置为0来修复它。

func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
    return true
}

func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
    scrollView.contentOffset.y = 0.0
}
© www.soinside.com 2019 - 2024. All rights reserved.