用swift的朋友們很多都是從ios8開發(fā)了,
其中針對table cell高度自動計算的 UITableViewAutomaticDimension 異常好用,但好像只對uilabel對象有效
當cell中內容比較復雜站刑,比如涉及圖文混排或加上其他動態(tài)高度的元素叁鉴,自動高度就失效了
而swift的自動高度資料很少瓢颅,就整了一個出來
首先是這個extension可以計算出string內容的高度
extension String{
//MARK:獲得string內容高度
func stringHeightWith(fontSize:CGFloat,width:CGFloat)->CGFloat{
let font =UIFont.systemFontOfSize(fontSize)
let size =CGSizeMake(width,CGFloat.max)
let paragraphStyle =NSMutableParagraphStyle()
paragraphStyle.lineBreakMode= .ByWordWrapping;
let attributes = [NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle.copy()]
let text =selfasNSString
let rect = text.boundingRectWithSize(size, options:.UsesLineFragmentOrigin, attributes: attributes, context:nil)
return rect.size.height
}//funcstringHeightWith
}//extension end
然后可以用這個方法計算cell內各個元素的高度
//MARK: 計算cell的高度
func cellHeightByData(data:NSDictionary)->CGFloat{
var content=data.stringAttributeForKey("content")
var height=content.stringHeightWith(17,width:300)
var imgSrc=data.stringAttributeForKey("image") as NSString
ifimgSrc.length==0
{
return59.0+height+40.0
}
return59.0+height+5.0+112.0+40.0
}
最后在uitable的heightForRowAtIndexPath方法中調用
func tableView(tableView:UITableView, heightForRowAtIndexPath indexPath:NSIndexPath) ->CGFloat{
let data :JobLogsDataModel=tableData[indexPath.row] as JobLogsDataModel
return cellHeightByString(data)
//return UITableViewAutomaticDimension
}
ok空幻,收工