当使用大型标题并点击状态栏滚动到UIScrollView
或UITableView
的顶部(可能还有UICollectionView
,还没有测试过),它总是有点太过分了。
我在我的TableView
上启用了刷新功能,当点击状态栏时,它会显示为这样并保持这种状态直到我点击屏幕。
我在另一个ScrollView
有一个ViewController
,如果我点击它的状态栏,它也会滚动一点点太远,使导航栏太高。当我点击某处或滚动一点点时,这也会恢复正常。
这也只有在我激活了大型标题时才会发生,使用普通标题一切正常。
任何想法如何解决这一问题?
如何重新创建:
UIViewController
创建一个新项目,里面有TableView
。UIViewController
上设置标题TableView
上设置约束以固定到ViewController
的边缘TableView
为ViewController
创建出口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
}
}
好的,所以我找到了问题发生的原因,但没有找到如何解决这个问题。
如果您正在使用大型标题和UITableViewController,导航栏半透明设置为关闭,则会出现问题。当你转回半透明时问题消失了。
如果您在普通的UIViewController中使用TableView,则始终会出现问题。
编辑
如果您使用半透明导航栏,则设置“extendedLayoutIncludesOpaqueBars = true”可以解决问题!
我已经通过滚动到顶部将contentOffset设置为0来修复它。
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
return true
}
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}