滚动到表格视图顶部并显示大标题iOS

问题描述 投票:0回答:1

我想滚动到tableView的顶部,并在我点击选项卡栏上的选项卡时,也显示largeTitle中的navigationBar

使用scrollToRow方法不显示largeTitle:

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

ios swift uitableview uinavigationbar large-title
1个回答
0
投票

我在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
}
© www.soinside.com 2019 - 2024. All rights reserved.