how to make UITextView height dynamic according to text length?

前端 未结 21 2356
隐瞒了意图╮
隐瞒了意图╮ 2020-11-28 05:44

As you can see in this image

the UITextView changes it\'s height according to the text length, I want to make it adjust it\'s height according to the te

21条回答
  •  星月不相逢
    2020-11-28 06:14

    Here are two pitfalls in iOS 8.3 when coming with textView.textContainer.maximumNumberOfLines = 10

    Refer to my gist, please.

    textView.attributedText = originalContent
    
    let lineLimit = 10
    textView.isEditable = true
    textView.isScrollEnabled = false
    textView.textContainerInset = .zero // default is (8, 0, 8, 0)
    textView.textContainer.maximumNumberOfLines = lineLimit // Important condition
    textView.textContainer.lineBreakMode = .byTruncatingTail
    
    // two incomplete methods, which do NOT work in iOS 8.3
    
    // size.width可能比maxSize.width小 ————遗憾的是 iOS 8.3 上此方法无视maximumNumberOfLines参数,所以得借助于UILabel
    // size.width may be less than maxSize.width, ---- Do NOT work in iOS 8.3, which disregards textView.textContainer.maximumNumberOfLines
    // let size = textView.sizeThatFits(maxSize) 
    
    // 遗憾的是 iOS 8.3 上此方法失效了,得借助于UILabel
    // Does not work in iOS 8.3
    // let size = textView.layoutManager.usedRectForTextContainer(textView.textContainer).size 
    
    // Suggested method: use a temperary label to get its size
    let label = UILabel(); label.attributedText = originalContent
    let size = label.textRect(forBounds: CGRect(origin: .zero, size: maxSize), limitedToNumberOfLines: lineLimit).size
    textView.frame.size = size
    

提交回复
热议问题