zoukankan      html  css  js  c++  java
  • swift 版本 UItableViewCell的动态高度补足

    用swift的朋友们很多都是从ios8开发了,

    其中针对table cell高度自动计算的 UITableViewAutomaticDimension 异常好用,但好像只对uilabel对象有效

       当cell中内容比较复杂,比如涉及图文混排或加上其他动态高度的元素,自动高度就失效了

    而swift的自动高度资料很少,就整了一个出来

    首先是这个extension可以计算出string内容的高度
    extension String{
    
    //MARK:获得string内容高度
    
      func stringHeightWith(fontSize:CGFloat,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,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
    
    }
  • 相关阅读:
    Go的几种函数式编程范例
    换零钱和快速幂
    随笔不是博客
    leetcode-51
    leetcode-50
    拨号器
    简易计算器的实现
    python入门:1-100所有数的和
    python入门:输出1-10以内除去7的所有数(简)
    python入门:输出1-10以内除去7的所有数(自写)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5607328.html
Copyright © 2011-2022 走看看