【问题标题】:Swift 5: TableView scroll to next cellSwift 5:TableView 滚动到下一个单元格
【发布时间】:2021-10-16 13:13:36
【问题描述】:

大家好,我想通过这个tableView.isPagingEnabled = true 在 tableview 上得到一些帮助,当我称之为他工作但他没有移动到全高的下一个单元格时,我如何使用它并移动到全高的下一个单元格,

这是我的代码:

import UIKit

private let id =  "ss"
class TableView:UITableViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: id)
        
        tableView.isPagingEnabled = true
        
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return 16
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: id, for: indexPath)
        
        cell.backgroundColor = .red
        return cell
        
    }
    
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        
        return 755
    } 
}

我希望我的单元格像 tiktok 单元格一样,当我向下滑动时,他会移动到全高的下一个单元格,

谢谢

【问题讨论】:

  • 什么是755,应该看你的屏幕尺寸吧?

标签: swift xcode tableview


【解决方案1】:

在我看来,您真正想要的是使用UIPageView 而不是UITableView。下面是一个游乐场,演示了使用UIPageView 来实现我认为您所描述的效果。当视图显示时,尝试上下滚动。

import UIKit
import PlaygroundSupport

func calibratedHue(hue: Int) -> Int {
    guard hue >= 0 else { return 0 }
    guard hue < 360 else { return 360 }

    return (hue / 12) * 12
}

class ColorPageViewController : UIViewController {
    var hue : Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor(
            hue: CGFloat(self.hue) / 360.0,
            saturation: 1.0,
            brightness: 1.0,
            alpha: 1.0)

    }
}

class PagesOfColors : NSObject, UIPageViewControllerDataSource {
    func pageViewController(_ pageViewController: UIPageViewController,
                        viewControllerBefore viewController: UIViewController) -> UIViewController? {
        var priorViewController : UIViewController? = nil

        if let colorPageViewController = viewController as? ColorPageViewController {
            if colorPageViewController.hue > 0 {
                let newViewController = ColorPageViewController()

                newViewController.hue = calibratedHue(hue: colorPageViewController.hue - 12)
                priorViewController = newViewController
            }
        }

        return priorViewController
    }

    func pageViewController(
        _ pageViewController: UIPageViewController,
        viewControllerAfter viewController: UIViewController) -> UIViewController? {

        var nextViewController : UIViewController? = nil

        if let colorPageViewController = viewController as? ColorPageViewController {
            if colorPageViewController.hue < 360 {
                let newViewController = ColorPageViewController()

                newViewController.hue = calibratedHue(hue: colorPageViewController.hue + 12)
                nextViewController = newViewController
            }
        }

        return nextViewController
    }
}


let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .vertical)
let pageSource =  PagesOfColors()
let startingPage = ColorPageViewController()
startingPage.hue = calibratedHue(hue: 180)
pageViewController.setViewControllers([startingPage], direction: .forward, animated: false, completion: nil)
pageViewController.dataSource = pageSource
pageViewController.view.bounds = CGRect(x: 0, y: 0, width: 320, height: 480)
PlaygroundSupport.PlaygroundPage.current.liveView = pageViewController

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多