我有一个UITextView设置为预览4行文本,当用户单击“阅读更多”时,该限制设置为0个最大行,并且显示为完整长度。
func showMore() {
self.readMoreLabel.snp.updateConstraints { (make) -> Void in
make.height.equalTo(0)
}
_descriptionHeight?.deactivate()
descriptionTextView.textContainer.maximumNumberOfLines = 0
descriptionTextView.invalidateIntrinsicContentSize()
}
这很好用,但是在某些情况下,少于或等于4行文本,因此不需要“更多”按钮。
我看不到任何方法来计算文本是否小于4行以隐藏read more
按钮。由于内容大小受行数限制,因此我无法检查其与帧高的关系或类似的标准方法。
这是我没有运气的尝试:
func setDescription(_ description: NSAttributedString) {
descriptionTextView.attributedText = description
setNeedsLayout()
layoutIfNeeded()
if descriptionTextView.contentSize.height < descriptionTextView.bounds.height {
self.readMoreLabel.snp.updateConstraints { (make) -> Void in
make.height.equalTo(0)
}
}
}
任何人都可以建议我如何实现一项能够计算uitextview的内容是否少于4行的检查吗?
答案 0 :(得分:0)
基于此处的讨论:Counting the number of lines in a UITextView, lines wrapped by frame size
这似乎可以可靠地用于我的测试:
func getNumberOfLines(in textView: UITextView) -> Int {
let numberOfGlyphs = textView.layoutManager.numberOfGlyphs
var index = 0, numberOfLines = 0
var lineRange = NSRange(location: NSNotFound, length: 0)
while index < numberOfGlyphs {
textView.layoutManager.lineFragmentRect(forGlyphAt: index, effectiveRange: &lineRange)
index = NSMaxRange(lineRange)
numberOfLines += 1
}
return numberOfLines
}