clyne의 개발 기록

[Swift] UILabel내 text의 세로, 가로길이 구하기 본문

iOS/Swift

[Swift] UILabel내 text의 세로, 가로길이 구하기

clyne_dev 2021. 5. 11. 20:55

안녕하세요!

iOS 개발자 CNOO입니다!!

 

오늘은 UILabel 안에 있는 Text의 가로 길이와 세로 길이를 구하는 방법에 대해서 공유드리고자 합니다.

UILabel의 크기를 동적으로 변경해야하거나,

동적으로 Inset을 주기 위해, 텍스트의 가로 길이를 구해서,   UILabel의 width를 변경하기도 합니다.

 

저는 사용하기 쉽도록 UILabel의 확장함수로  getTextWidth 를 만들어서 사용하고있습니다.


extension UILabel {
    
    func getTextWidth() -> CGFloat {
        if let text = self.text, let font = self.font {
            return text.size(withAttributes: [NSAttributedString.Key.font : font]).width
        } else {
            return self.frame.size.width
        }
    }
    
    
    func getTextHeight() -> CGFloat {
        if let text = self.text, let font = self.font {
            return text.size(withAttributes: [NSAttributedString.Key.font : font]).height
        } else {
            return self.frame.size.width
        }
    }
    
}

이렇게 확장함수 만들어놓고 사용하면  정말 개 꿀입니다.!!!

 

저는 주로 아래와 같이 사용합니다.

 

let uiLabel = UILabel() 
uiLabel.snp.makeConstraints {
    $0.width.equalTo(attendLabel.getTextWidth() + 20)  // 10은 양쪽 패딩
}

(SnapKit을 사용하여 width를 설정하였습니다)

 

정말 쉽죠? TextField에서도 가능하니, 필요하실 때 사용해보세요 ㅎㅎ

 

 

 

ps. 아!  만약 font에 따른 텍스트의 가로, 세로 길이를 구하고 싶으실 때는, 상단 코드 중, "font"에다가 원하시는 UIFont를 넣으시면 됩니다!!

 

 

 

 

ps2. 렛터디에서는 아래와 같이 좌우상하  패딩을 줄 때 주로 사용하고 있습니다 ㅎㅎ