Swift动态tableview与填充文本的标签高度成比例

时间:2016-10-22 06:35:49

标签: swift tableviewcell

您好我正在尝试使用自定义单元格创建表格视图。制作它的主要目标是我按照标签高度的比例调整tableview单元格的高度,标签高度由文本大小改变。当我用下面的代码运行我的应用程序时,它看起来很顺利。但是getStringHeight方法有时无法识别单元格的行。即使行数只有一个,该方法也会分配两行单元,这会使单元格成为不必要的空间。

我认为如果它会识别两行,则行超过3/4,在一行中填充文本。我想我使用Apple SD Gothic(Family)中包含的韩文字体。但我可以在UIFont中输入确切的名称(名称:“”,大小:),因为它无法识别它。

你能帮帮我吗?这是非常重要的项目。我熬夜了,但我没有想出解决这个问题的想法。

 func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
    let rowNum = downloadedContents!.count - indexPath.row - 1

    let sizeFactory = UINib(nibName: "DownLoadPlayViewControllerCell", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as? DownLoadPlayViewControllerCell
    sizeFactory!.frame.size.height = 300
    var bounds = CGSize(width: tableView.bounds.width, height: 78.5)
    let pod = self.pods[rowNum]
    if(sizeFactory != nil)
    {
        let top = sizeFactory?.programLabel.frame
        let bottom = sizeFactory?.dateFilesizeLabel.frame


        var labelSize = getStringHeight(pod.contentTitle!, fontSize: 13.0, width: sizeFactory!.titleLabel.frame.width)

        let totalCellHeight = labelSize + top!.height + bottom!.height + 28.0
        bounds.height = totalCellHeight
    }


    return bounds.height


}

func getStringHeight(mytext: String, fontSize: CGFloat, width: CGFloat) -> CGFloat
{
    let font = UIFont(name: "Apple SD Gothic Neo", size: fontSize)
    let size = CGSizeMake(width,CGFloat.max)
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineBreakMode = .ByWordWrapping;
    let attributes = [NSFontAttributeName:font! as UIFont,
                      NSParagraphStyleAttributeName:paragraphStyle.copy()]

    let text = mytext as NSString
    let rect = text.boundingRectWithSize(size, options:.UsesLineFragmentOrigin, attributes: attributes, context:nil)
    return rect.size.height
}

2 个答案:

答案 0 :(得分:0)

我可能会建议您使用:

var elem = document.querySelector('.js-switch');
var init = new Switchery(elem);
init.disable();
init.enable();

这将自动调整单元格的高度,而不查找文本的高度。 您可以将这两行放在viewDidLoad上,与估计的行高相同,它可以帮助您进行渲染。

答案 1 :(得分:0)

试用此代码:

注意:两种方法都应该有效。测试Swift 3。

方法1:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    tableView.estimatedRowHeight = 44.0 // standard tableViewCell height
    tableView.rowHeight = UITableViewAutomaticDimension

 return yourArrayName.count

    }

方法2:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

注意:您可能需要将此代码放入 cellForRowAt

  yourCellName.sizeToFit()