카테고리 없음

swift 더보기 버튼 비활성화 시키기

kingarthur 2024. 9. 7. 12:05

일단 저번처럼 더보기 버튼을 만들었지만... 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줄  넘었다고 판단되면 더보기 기능이 나오도록 ~~~ 

 

기능이 잘 작동해서 기분이 째져 ~ 

다음에도 잘 사용해보자.