【问题标题】:scroll to top of tableview and show large title iOS滚动到 tableview 顶部并显示大标题 iOS
【发布时间】:2020-06-23 14:26:55
【问题描述】:

当我点击标签栏中的标签时,我想滚动到我的 tableView 的顶部并在navigationBar 中显示largeTitle

使用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

【问题讨论】:

  • 您为您的navigationBar 设置了prefersLargeTitles 吗?
  • @koen 是的,prefersLargeTitle 已设置。
  • @SidShehxad 这个问题是基于 scrollView,我有一个 tableView
  • @WalterBeiter UITableViewUIScrollView 的子类,因此它很可能适用。

标签: ios swift uitableview uinavigationbar large-title


【解决方案1】:

我在UITabBarControllerDelegate里面使用了这两种方法: 第二种方法搜索第一个scrollView,然后滚动到该scrollView 的顶部。由于tableView 也是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
}

【讨论】:

  • 96 是大导航栏的高度。
  • 我知道,但你应该动态获取它而不是硬编码
  • 我何时何地可以动态获取?我需要一个精确的时刻,在那里我可以获得大型导航栏的高度。或者 UIkit 中是否有一个常量可以从中读取该值?
  • 找不到那个编辑了,所以我不知道你想改变什么
猜你喜欢
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多