簡體   English   中英

滾動到 tableview 頂部並顯示大標題 iOS

[英]scroll to top of tableview and show large title iOS

我想滾動到 tableView 的頂部,並在點擊選項卡欄中的選項卡時在navigationBar顯示largeTitle

使用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仍會折疊。

我該怎么做才能模仿 tableView 的scrollsToTop屬性的行為,該屬性確實滾動到頂部並顯示largeTitle 它的動畫非常流暢並且總是顯示大的navigationBar

我在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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM