在表格视图滚动条上显示日期标签,例如whatsapp

时间:2018-12-12 06:52:51

标签: ios swift uitableview whatsapp

您好,我只想在whatsapp中滚动UITableView时显示日期 Today 标签。 Whatsapp Video Here

此外,如果我们开始滚动昨天的聊天,我们可以在whatsapp中看到昨天的标签,并且在停止滚动View时会自动隐藏。如果可能的话,可以在表格视图的各个部分进行/不进行。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

一些建议:

  1. 观察UITableView滚动开始和停止

    也许您可以通过工具UIScrollViewDelegate观察tableview滚动。有两种方法可以告诉委托滚动视图有关开始/停止滚动内容。 scrollViewWillBeginDraggingscrollViewWillEndDragging

  2. 不通过tableview部分显示标签

    只需将您的今天标签添加为UITableView的子视图

答案 1 :(得分:0)

我认为,您正在寻找这样的东西

enter image description here

要实现这一目标

let uiScreen = UIScreen.main.bounds.size
let whatsAppTableView = UITableView()
    override func viewDidLoad() {
        super.viewDidLoad()
        //self.customization()
        whatsAppTableView.dataSource = self
        whatsAppTableView.delegate = self
        whatsAppTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        let backgroundImage = UIImage(named: "w") //w = whatsapp background Image
        let imageView = UIImageView(image: backgroundImage)
        self.whatsAppTableView.backgroundView = imageView
        whatsAppTableView.frame = CGRect(x:0, y:0, width:uiScreen.width, height: uiScreen.height)
        whatsAppTableView.separatorStyle = .none
        view.addSubview(whatsAppTableView)

    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if section == 0 {
            return 3
        }
        if section == 1 {
            return 3
        }
        if section == 2 {
            return 5
        }
        return 0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.selectionStyle = .none
        cell.backgroundColor = UIColor.clear
        return cell
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

        let headerLabelView = UILabel(frame: CGRect(x: 0, y: 0, width: whatsAppTableView.frame.size.width, height: 40))
        let headerLabel = UILabel(frame: CGRect(x: (whatsAppTableView.frame.size.width-100)/2, y: 20, width: 100, height: 40))

        headerLabel.adjustsFontSizeToFitWidth = true
        headerLabel.font = AppFont.PopinsBold(size: 12)
        headerLabel.backgroundColor = UIColor.lightGray
        headerLabel.textAlignment = .center
        headerLabel.roundedAllCorner()
        //headerLabel.textColor = UIColor.black

        if section == 0 {
            headerLabel.text = "5 December" // Put it dynamic as requirment  [Date Array]
        }
        if section == 1 {
            headerLabel.text = "Yesterday"
        }
        if section == 2 {
            headerLabel.text =  "Today"
        }

        headerLabelView.addSubview(headerLabel)
        return headerLabelView
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 3 // Depends on your date array
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 40
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 300 //Put As you required
    }

要检查滚动方向/位置-

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        if(velocity.y>0) {
            //Code will work without the animation block.I am using animation block incase if you want to set any delay to it.
            UIView.animate(withDuration: 2.5, delay: 0, options: UIViewAnimationOptions(), animations: {

                print("Hide")
            }, completion: nil)

        } else {
            UIView.animate(withDuration: 2.5, delay: 0, options: UIViewAnimationOptions(), animations: {


                print("Unhide")
            }, completion: nil)
        }
    }