gpt4 book ai didi

ios - 在 tableView 和 scrollView 之间连续滚动

转载 作者:行者123 更新时间:2023-11-29 13:51:48 25 4
gpt4 key购买 nike

我有一个带有 uiview 标题和 TableView 的父 ScrollView 。我正在尝试使用与 Twitter 或 Instagram 个人资料页面类似的行为。您开始滚动父 ScrollView ,一旦标题消失,就会有一个从 ScrollView 滚动到表格 View 滚动的连续过渡,而无需抬起手指并将其替换为表格 View .现在,当前的行为有点乱。在 ScrollView 内容偏移超过标题后,我必须抬起手指并将其放在表格 View 上才能开始滑动表格 View 。

主视图 Controller

    import UIKit
import XLPagerTabStrip

class MainViewController: UIViewController {

lazy var headerViewController: UIViewController = {
let header = UIViewController()
return header
}()

lazy var bottomViewControllers: BottomPageViewController = {
let bvc = BottomPageViewController()
return bvc
}()

lazy var scrollView: UIScrollView = {
let sv = UIScrollView()
sv.delegate = self
sv.showsVerticalScrollIndicator = false
sv.bounces = true
sv.bounces = false
return sv
}()


override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(scrollView)
let f = UIScreen.main.bounds
scrollView.frame = CGRect(x: f.minX, y: f.minY, width: f.width, height: f.height)

add(headerViewController, to: scrollView, frame: CGRect(x: 0, y: 0, width: f.width, height: 150))
add(bottomViewControllers, to: scrollView, frame: CGRect(x: 0, y: headerViewController.view.bounds.height, width: f.width, height: f.height))
scrollView.contentSize = CGSize(width: f.width, height: f.height * 2)

if let vcs = bottomViewControllers.viewControllers as? [BottomViewController] {
for vc in vcs {
vc.delegate = self
}
}
}

}

extension MainViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
guard let controllers = bottomViewControllers.viewControllers as? [BottomViewController] else { return }
let selectedController = controllers[bottomViewControllers.currentIndex]
if self.scrollView == scrollView {
selectedController.tableView.isScrollEnabled = self.scrollView.contentOffset.y >= 150
print(scrollView.contentOffset.y)
scrollView.isScrollEnabled = !selectedController.tableView.isScrollEnabled
bottomViewControllers.view.frame.origin.y = max(150, scrollView.contentOffset.y)
}


}
}

extension MainViewController: CustomScrollDelegate {
func tableViewScroll(_ viewController: BottomViewController) {
print(viewController.tableView.contentOffset.y)
viewController.tableView.isScrollEnabled = viewController.tableView.contentOffset.y > 0
}
}

底部 View Controller

import UIKit
import XLPagerTabStrip

protocol CustomScrollDelegate {
func tableViewScroll(_ viewController: BottomViewController)
}

class BottomViewController: UITableViewController {

var pageTitle: String?
var pageIndex: Int = 0
var delegate: CustomScrollDelegate?

override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .red
self.tableView.isUserInteractionEnabled = false
self.tableView.bounces = true
self.tableView.showsVerticalScrollIndicator = true
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "TETST")
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "TETST", for: indexPath) as? UITableViewCell else { return UITableViewCell() }
return cell
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1000
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
delegate?.tableViewScroll(self)
}

init(pageTitle: String, pageIndex: Int) {
self.pageTitle = pageTitle
self.pageIndex = pageIndex
super.init(nibName: nil, bundle: nil)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

}

extension BottomViewController: IndicatorInfoProvider {
func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
return IndicatorInfo.init(title: pageTitle ?? "Tab \(pageIndex)")
}
}

最佳答案

您应该简单地将标题作为标题添加到 UITableView(而不是部分标题!),并让它与 UITableView 的其余部分一起滚动:How to scroll the header along with the UITableView?

您还可以让 UITableView 将它的 contentSize 直接链接到它的高度,这样 UITableView 本身就根本不会滚动,永远,像这样:Resizing UITableView to fit content

这完全取决于您是否通过分页等方式动态添加行,您的解决方案会有多复杂。但我认为大多数情况下,只需以正确的模式设置 UITableView header

,您就可以到达那里

关于ios - 在 tableView 和 scrollView 之间连续滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59332996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com