美文网首页iOS优秀开发文章swift 文章收集
Swift开发iOS--仿微信朋友圈(4)

Swift开发iOS--仿微信朋友圈(4)

作者: Swift没有分号 | 来源:发表于2016-08-23 10:20 被阅读0次

    Swift开发iOS--仿微信朋友圈(4)——cell高度自适应
    cell高度设置在

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{
      return 高度
    }
    本例中,有文字、图片、点赞、评论、时间、头像等高度需要计算。
    一、计算文字内容高度
    

    扩展String类,实现根据字号和label的宽度计算高度

    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 = self as NSString
            
            let rect = text.boundingRectWithSize(size, options:.UsesLineFragmentOrigin, attributes: attributes, context:nil)
            
            return rect.size.height
            
        }//funcstringHeightWith
        
    }//extension end
    

    将数据传入方法中,实现这个方法

    func cellHeightByData(data:String)->CGFloat{
        
        let content = data
        let height=content.stringHeightWith(13,width: UIScreen.mainScreen().bounds.width - 55 - 10)
        return  height
        
    }
    

    二、计算图片内容高度
    根据图片个数计算高度。

    func cellHeightByData1(imageNum:Int)->CGFloat{
        
        let lines:CGFloat = (CGFloat(imageNum))/3
        var picHeight:CGFloat = 0
        switch lines{
        case 0...1:
            picHeight = 80
            break
        case 1...2:
            picHeight = 155
            break
        case 2...3:
            picHeight = 230
            break
        default:
            picHeight = 0
        }
        return picHeight
        
    }
    

    三、计算评论个数与高度
    规定每行评论高20

    func cellHeightByCommentNum(Comment:Int)->CGFloat{
        return CGFloat(Comment * 20)
    }
    

    四、依次传入参数,计算出高度,返回给cell

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{
            var h_content = cellHeightByData(dataItem[indexPath.row]["content"]! as! String)
            let h_image = cellHeightByData1(dataItem[indexPath.row]["imageUrls"]!.count)
            var h_like:CGFloat = 0.0
            let h_comment = cellHeightByCommentNum(goodComm[indexPath.row]["commentName"]!.count)
            if h_content>13*5{
                if !self.selectItems[indexPath.row]{
                    h_content = 13*5
                }
            }
            if goodComm[indexPath.row]["good"]!.count > 0{
                h_like = 40
            }
            return h_content + h_image + 50 + 20 + h_like + h_comment
        }
    

    如果操作中需要改变cell的高度,需要在设置完cell高度后reloadData()当前的TableView。
    github传送门

    相关文章

      网友评论

        本文标题:Swift开发iOS--仿微信朋友圈(4)

        本文链接:https://www.haomeiwen.com/subject/bhngsttx.html