【问题标题】:how to find actual height of auto growable UILabel如何找到可自动增长的 UILabel 的实际高度
【发布时间】:2018-10-13 10:59:27
【问题描述】:

我已将 UIlabel 的行数设为零,以便其高度会根据其内容进行调整。

有时如果我给出一个大文本,它会在 UI 中增长到 4 行,但是当我访问它时

frame.size.height

它返回 21 而不是实际高度,实际高度要大得多。

关于如何解决这个问题的任何想法?

【问题讨论】:

标签: ios uilabel height ios-autolayout


【解决方案1】:

迅速

public  static func requiredHeightForLabel(text : String, font : UIFont, width : CGFloat)   -> CGFloat {

    let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude))//UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.font = font
    label.text = text

    label.sizeToFit()
    return label.frame.height
}

目标c

+(CGFloat)getLabelHeightForString:(NSString *)string font:(UIFont *)font 
{
CGSize size = CGSizeMake(lablwidth, MAXFLOAT);

NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];

CGSize boundingBox = [string boundingRectWithSize:size

                                          options:NSStringDrawingUsesLineFragmentOrigin

                                       attributes:@{NSFontAttributeName:font}

                                          context:context].size;

size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));

return size.width;

}

【讨论】:

  • 这会根据文本大小为您提供标签的确切高度
  • 感谢 sizetofit 对我的帮助
【解决方案2】:

在您的视图控制器中,您可以使用通知您布局完成的方法:

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("frame = \(label.frame)")
    }

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 1970-01-01
    • 2011-08-12
    • 2015-03-22
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多