ios - 滚动到 tableview 顶部并显示大标题 iOS
问题描述
我想滚动到我的 tableView 的顶部,并largeTitle
在navigationBar
我点击标签栏中的标签时显示。
使用scrollToRow
方法不显示大标题:
extension TableViewConstroller: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if tabBarController.selectedIndex == 1 {
let indexPath = IndexPath(row: 0, section: 0)
tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
}
}
我也试过
self.tableView.scrollRectToVisible(CGRect(x: 0, y: -64, width: 1, height: 1), animated: true)
这有时有效,但如果我向下滚动,当此方法向上滚动时tableView
,navigationBar
仍然会折叠。
我可以做些什么来模仿 tableView 的scrollsToTop
属性的行为,它滚动到顶部并显示largeTitle
?它的动画非常流畅,并且总是显示大的navigationBar
.
解决方案
我在里面用了这两种方法UITabBarControllerDelegate
: 第二种方法搜索第一种scrollView
然后滚动到最上面那个scrollView
。由于 atableView
也是 a scrollView
,因此这种方法有效。
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if tabBarController.selectedViewController == viewController {
if let scrollView = findScrollView(in: viewController.view) {
let desiredOffset = CGPoint(x: 0, y: -scrollView.contentInset.top - 96 + UIApplication.shared.statusBarFrame.height)
scrollView.setContentOffset(desiredOffset, animated: true)
}
}
return true
}
private func findScrollView(in view: UIView) -> UIScrollView? {
if let scrollView = view as? UIScrollView {
return scrollView
} else {
for subview in view.subviews {
if let scrollView = findScrollView(in: subview) {
return scrollView
}
}
}
return nil
}
推荐阅读
- wpf - WPF Ctrl+C 热键注册覆盖/停止典型的复制功能
- flutter - Dart - 如何处理多个套接字响应?
- java - 关于 Java 构造函数的练习
- laravel - npm 发现 1high 严重性漏洞
- c++ - memory_resource 中放置 new 运算符和 pmr 的区别?
- algorithm - PageRank算法给出奇怪的值
- python - Python:如何将具有分层函数的 ODE 系统拟合到多个数据中
- html - Boostrap 4:如何内联应该隐藏在小屏幕上的文本?
- google-analytics - 获取一系列非连续日期的 Google Analytics(分析)报告?
- oracle - 将pdf文件批量导入oracle表