iOS-Swift-自动计算cell高度
jopen
9年前
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. } }