首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据来自API的数组创建高度动态变化的UITableViewCell

如何根据来自API的数组创建高度动态变化的UITableViewCell
EN

Stack Overflow用户
提问于 2017-05-15 07:15:50
回答 2查看 44关注 0票数 0

它的数组数据只用于一个单元格视图,我需要在表视图上设置product_name和total_quantity,cell.sometime total_quantity可以是2,有时可以是10。给我一些基本的想法,这样我就可以继续前进了。

[{"total_quantity":"50“、"product_id":"13”、“product_name”:“虾”}、{"total_quantity":"13“、"product_id":"14”、“product_name”:“鱼类”}、{"total_quantity":"57“、"product_id":"15”、“product_name”:“鸡乳房”}、{"total_quantity":"10“、"product_id":"16",“product_name”:“牛肉”},{"total_quantity":"50","product_id":"13",“product_name”:“虾”},{"total_quantity":"13","product_id":"14",“product_name”:“鱼类”},{"total_quantity":"57","product_id":"15",“product_name”:“鸡乳房”},{"total_quantity":"10","product_id":"16",“product_name”:“牛肉”}]

屏幕截图

EN

回答 2

Stack Overflow用户

发布于 2017-05-15 07:28:09

如果您想要更改高度,请使用这样的方法:

代码语言:javascript
复制
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let object = myArrayDataset[indexPath.row]
    //for example
    if object.numberOfItems > 10 {
        return 80.0
    }
    else {
        return 40.0
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-05-15 07:31:49

扩展字符串{

代码语言:javascript
复制
func sizeWithGivenSize(_ size: CGSize,font: UIFont,paragraph: NSMutableParagraphStyle? = nil) -> CGSize {
    var attributes = [String:AnyObject]()
    attributes[NSFontAttributeName] = font
    if let p = paragraph {
        attributes[NSParagraphStyleAttributeName] = p
    }
    attributes[NSFontAttributeName] = font
    return (self as NSString).boundingRect(with: size,
                                           options: [.usesLineFragmentOrigin,.usesFontLeading],
                                           attributes: attributes,
                                           context: nil).size
}

使用这种方法可以得到不同长度字符串的UILabel帧。然后从上到下计算高度。为了高性能,你最好在模型上做这件事。

例如:

代码语言:javascript
复制
func calculateFrame() -> Void {
    let width = UIComponentsConst.screenWidth
    var tmpFrame = ProjectDetailTeamCellLayout()

    var maxX: CGFloat = 0
    var maxY: CGFloat = tmpFrame.topSpace

    if let titleText = title {
        let titleSize = titleText.sizeWithGivenSize(MaxSize, font: ProjectDetailTeamCellLayout.titleFont, paragraph: nil)
        tmpFrame.titleLabelFrame = CGRect.init(x: 15, y: maxY, width: titleSize.width, height: titleSize.height)
        maxY = tmpFrame.titleLabelFrame!.maxY
        maxX = tmpFrame.titleLabelFrame!.maxX
    }

    if let nameText = nameTitle, !nameText.isEmpty {
        tmpFrame.grayLineFrame = CGRect(x: maxX + tmpFrame.itemSpace, y: tmpFrame.topSpace, width: 1, height: tmpFrame.titleLabelFrame?.height ?? 0)
        let nameSize = nameText.sizeWithGivenSize(MaxSize, font: ProjectDetailTeamCellLayout.nameLabelFont, paragraph: nil)
        let nameTmpFrame = CGRect(x: tmpFrame.grayLineFrame!.maxX + tmpFrame.itemSpace, y: tmpFrame.topSpace + (tmpFrame.titleLabelFrame?.height ?? nameSize.height ) / 2 - nameSize.height / 2, width: nameSize.width, height: nameSize.height)
        tmpFrame.nameLabelFrame = nameTmpFrame
        maxY = maxY > tmpFrame.nameLabelFrame!.maxY ? maxY : tmpFrame.nameLabelFrame!.maxY
    }

    if let subTitleText = subTitle, !subTitleText.isEmpty {
        let subTitleSize = subTitleText.sizeWithGivenSize(CGSize(width: width - 45, height: CGFloat.greatestFiniteMagnitude), font: ProjectDetailTeamCellLayout.subTitleFont, paragraph: nil)
        tmpFrame.subTitleLabelFrame = CGRect(x: 15, y: maxY + tmpFrame.lineSpace, width: subTitleSize.width, height: subTitleSize.height)
        maxY = tmpFrame.subTitleLabelFrame!.maxY + 10
    }
    tmpFrame.height = maxY + 5
    self.frameInfo = tmpFrame
}

试试看?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43973479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档