일단 저번처럼 더보기 버튼을 만들었지만... 3줄까지는 더보기 버튼이 필요없었다 왜냐 기본 3줄은 보이도록 만들어서
그래서 3줄을 초과하면 더보기 버튼이 활성화되어서 보였으면 좋겠다 생각을했다.
그래서 만들어봤다.
// 메모라벨을 확인하고 더보기 기능 적용
private func checkMemoLabel() {
DispatchQueue.main.async {
// 텍스트가 3줄을 넘는지 확인
let exceedsThreeLines = self.doesTextExceedThreeLines(self.memoLabel)
// '더보기' 버튼을 숨기거나 보이게 설정
self.seeMoreButton.isHidden = !exceedsThreeLines
// '더보기' 버튼이 보일 때만 줄이 생략된 텍스트 설정
if exceedsThreeLines {
self.memoLabel.addTrailing(with: "... ", moreText: "more", moreTextFont: UIFont.systemFont(ofSize: 15), moreTextColor: UIColor.gray)
}
}
}
// 더보기 비활성화 기능 계산하기
private func doesTextExceedThreeLines(_ label: UILabel) -> Bool {
// 현재 레이블의 크기에 맞는 텍스트 높이를 계산
let labelWidth = label.frame.width
let labelHeight = label.font.lineHeight * 3 // 3줄의 높이 계산
let size = CGSize(width: labelWidth, height: CGFloat.greatestFiniteMagnitude)
let attributes = [NSAttributedString.Key.font: label.font!]
let attributedText = NSAttributedString(string: label.text ?? "", attributes: attributes)
let boundingRect = attributedText.boundingRect(with: size, options: .usesLineFragmentOrigin, context: nil)
// 계산된 텍스트 높이가 3줄의 높이보다 크면 3줄을 초과한 것임
return boundingRect.height > labelHeight
}
디스패치큐를 사용해서 함수에 기능을 넣어 구현해봤다.
3줄 넘었다고 판단되면 더보기 기능이 나오도록 ~~~
기능이 잘 작동해서 기분이 째져 ~
다음에도 잘 사용해보자.