iOS-Swift-自動計算cell高度

jopen 9年前發布 | 26K 次閱讀 iOS開發 移動開發 iOS-Swift-

Swift-CalculateCellHight

iOS-Swift-自動計算cell高度

前言

因為最近工作有需求要用到這個功能,但是我工程已經決定用OC寫了,所以手癢寫個swift版,本章博客用到很多上一篇博客的東西,還運用了一小步遞歸,所以有不明白的可以去看一看我的上一篇博客.


上代碼

先創建一個plist寫假數據

這里寫圖片描述

然后創建一個Cell

這里寫圖片描述

創建一個Model.swift寫以下代碼

import UIKit

class Model: NSObject {
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        return;
    }
    // 傳入字符串計算行數
    func PassStringReturnIndex(str:String)->Int {
        // 比較值
        let rangeStr = "\n"
        // 比較
        let range = str.rangeOfString(rangeStr)
        // 如果有結果
        if range != nil {
            // 行數+1
            line++
            // 從比較結尾進行切割字符串
            let str2 = str.substringFromIndex(range!.endIndex)
            // 遞歸調用函數
            PassStringReturnIndex(str2)
        }
        return line
    }
    override func setValue(value: AnyObject?, forKey key: String) {
        super.setValue(value, forKey: key)
        // 當賦值Comment時計算行高
        if key == "comment" {
            // plist里寫的\n都為\\n 這里替換成\n
            comment = (value as!String).stringByReplacingOccurrencesOfString("\\n", withString: "\n")
            // 調用計算行高函數
            line = PassStringReturnIndex(comment)
        }
    }
    // 屬性
    var title:String = ""
    var writer:String = ""
    var comment:String = ""
    var line:Int = 0
}

最后再ViewController.swift加入以下代碼:

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!
    var modelArr:NSMutableArray = []
    override func viewDidLoad() {
        super.viewDidLoad()
        // model賦值
        loadModel()
        // 搭建tableView
        layoutTableView()
    }
    func layoutTableView(){
        // 注冊Cell
        tableView.registerNib(UINib.init(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "abc")
    }
    func loadModel(){
        // 從plist重給model賦值
        let path = NSBundle.mainBundle().pathForResource("DataList", ofType: "plist")
        let dataArr = NSArray(contentsOfFile:path!)
        for d in dataArr! {
            // KVC
            let dic:Dictionary<String,String> = d as! Dictionary
            let model = Model()
            model.setValuesForKeysWithDictionary(dic)
            modelArr.addObject(model)
        }

    }
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        let model = modelArr[indexPath.row] as! Model

        return CGFloat(90 + model.line*20);
    }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1;
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10;
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("abc", forIndexPath: indexPath) as! MyCell
        let model = modelArr[indexPath.row] as! Model
        cell.titleLabel.text = model.title
        cell.writer.text = model.writer
        cell.commentLabel.text = model.comment
        return cell;
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

效果圖

這里寫圖片描述

github:https://github.com/Lafree317/Swift-CalculateCellHight

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!