【Swift】もっと読む機能【UILabel】
やりたいこと
「もっと読む」機能を実現するために、UILabelがtruncate(切り捨て)されているか否かを判断したい。 調べてみても、改行対応かつUITableViewCell内でも正確に計算できるものがなかったので。
実装方法
lines
はUILabelに指定した行数。
その行数を超える時にtruncateされるので、truncateされなかった場合の高さ(textSize.height
)と、最大の高さ(maxHeight
)を比較する。
extension UILabel { func isTruncated(lines: Int, width: CGFloat) -> Bool { guard let labelText = text else { return false } let maxHeight = font.lineHeight * CGFloat(lines) let textSize = (labelText as NSString).boundingRect( with: CGSize(width: width, height: .greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil ).size return textSize.height > maxHeight } }