swift下tableview的使用(cell点击伸缩效果)

准备,在SB上放一个uitableview,设置布局为全屏,添加一下原型cell用于测试,cell里放一个label,自动布局为上下左三个边距为0,宽度为300

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    @IBOutlet weak var tableview: UITableView!
    
    var dict = [Int:Int]()
    let testValue  = "这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n这是一个测试\n"
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableview.tableFooterView=UIView()
        
        //二、行高匹配方法
        tableview.estimatedRowHeight = 60
        tableview.rowHeight = UITableViewAutomaticDimension
        
//        在iOS10已经顶格显示 
        tableview.separatorInset = UIEdgeInsets.zero
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 50
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableview.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let label = cell.contentView.viewWithTag(100) as! UILabel
        label.text = testValue //as String
        //从字典取
        if (dict[indexPath.row] ?? 1) == 1{
            label.numberOfLines = 1
        }else{
            label.numberOfLines = 0
        }
        return cell
    }
    
    /*
     //一、行高匹配方法
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let att = [NSFontAttributeName:UIFont.systemFont(ofSize: 17)]
        return testValue.boundingRect(with: CGSize(width: 300, height: 0) , options: .usesLineFragmentOrigin,attributes: att,context: nil).size.height
    }
    */
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableview.cellForRow(at: indexPath)
        let label = cell!.contentView.viewWithTag(100) as! UILabel
        //二、有动画效果 tableview.beginUpdates() tableview.endUpdates()
        tableview.beginUpdates()
        if label.numberOfLines == 0 {
            label.numberOfLines = 1
            //保存至字典
            dict[indexPath.row] = 1
        }else{
            label.numberOfLines = 0
            //保存至字典
            dict[indexPath.row] = 0
        }
        tableview.endUpdates()
        /*
         //一、没有动画效果
        tableview.reloadData()
        */
    }
    
    override func viewDidLayoutSubviews() {
//        也可以在这里设置顶格
//        tableview.separatorInset  = UIEdgeInsets.zero
//        tableview.layoutMargins = UIEdgeInsets.zero
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
//        也可以在这里设置顶格
//        cell.separatorInset = UIEdgeInsets.zero
//        cell.layoutMargins = UIEdgeInsets.zero
    }
}


你可能感兴趣的:(swift下tableview的使用(cell点击伸缩效果))