【问题标题】:Resize UITableViewCell Height based on UILabel Content根据 UILabel 内容调整 UITableViewCell 高度
【发布时间】:2015-10-26 19:05:21
【问题描述】:

我已经研究了一天多,老实说,我完全被为什么它没有像我期望的那样工作。

我正在尝试根据其中的 UILabel 将 UITableViewCell 扩展为正确的大小。我使用以下代码来确定 UILabel 所需的大小:

extension UILabel {

    func requiredHeight() -> CGFloat{

        let label:UILabel = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.max))
        label.text = self.text
        label.numberOfLines = 0
        label.font = self.font

        label.sizeToFit()


        print("Final Size - \(label.frame.height)")
        return label.frame.height + 10
    }
}

我的问题是,尽管有这个大小 - 当 Cell 在 'heightForRowAtIndexPath' 方法中调整大小时 - 它仍然不是正确的大小并且字符串被截断,这可以在下图中看到。

注意 - 一旦加载视图并将文本填充到 UILabel 中,我就会收集所需的单元格大小。

requiredHeight = overviewLabel.requiredHeight()
        if requiredHeight > overviewCell.frame.height {
            expander.hidden = false
        } else {
            expander.hidden = true
        }

任何关于如何解决此问题的建议将不胜感激。

【问题讨论】:

    标签: ios iphone swift uitableview swift2


    【解决方案1】:

    试试这个 sn-p。只需提供字体和大小的确切名称

    Swift 3.x

    func requiredHeight() -> CGFloat{
        let font = UIFont(name: "Helvetica", size: 16.0)
        let label:UILabel = UILabel(frame: CGRect(x:0, y:0, width:200, height:CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 0
        label.lineBreakMode = NSLineBreakMode.byWordWrapping
        label.font = font
        label.text = self.text
        label.sizeToFit()
        return label.frame.height + //Add some space as a part of your bottom and top constraint
    }
    

    斯威夫特 2.2

    func requiredHeight() -> CGFloat{
        let font = UIFont(name: "Helvetica", size: 16.0)
        let label:UILabel = UILabel(frame: CGRectMake(0, 0, 200, CGFloat.max))
        label.numberOfLines = 0
        label.lineBreakMode = NSLineBreakMode.ByWordWrapping
        label.font = font
        label.text = self.text
        label.sizeToFit()
        return label.frame.height + //Add some space as a part of your bottom and top constraint
    }
    

    假设您的标签的顶部和底部约束分别为 5 和 5,它们将返回语句设为

    return label.frame.height + 10
    

    注意:- 宽度应该是您想要的标签宽度。应该是根据你的UITableView或者UIView

    【讨论】:

    • 哇哦,就是这么简单。但是,请问为什么需要手动定义字体?我觉得非常奇怪我无法使用label.font=self.font
    • 我也曾经遇到过同样的问题。可能是 label.font = self.font 不起作用的一些奇怪问题。我搜索了某个地方,它只提供了您的 UILabel 正在使用的确切字体和大小,几乎没有约束填充。至少对我有用,你呢?
    • 是的,它工作得很好,谢谢!我只是在搞乱你的 sn-p 一点,显然我的不工作的主要原因是我的 CGRect Width 设置为self.frame.width。我确实觉得这很奇怪,为什么会这样。非常感谢你。
    • 如果对您有用,请接受答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2012-08-03
    • 2010-12-18
    • 2010-10-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多