Danny의 iOS 컨닝페이퍼
article thumbnail

시작

sizeToFit와 sizeThatFits 두 메서드 모두

해당 콘텐츠에 따라 자동으로 크기를 조절해 주는 메서드입니다.

 

간단한 예제와 함께 빠르게 설명하고 끝내겠습니다.

 

sizeToFit

간단히 설명하면, 뷰가 현재 포함하고 있는 콘텐츠에 맞게 크기를 조절합니다.

 

예를 들어, Label이 있다고 해봅시다.

let textLabel: UILabel = {
    let label = UILabel()
    label.numberOfLines = 0
    label.backgroundColor = .secondarySystemBackground
    label.text = "안녕하세요" + "\n" + "저는 현재 iOS 공부중입니다." + "\n" + "가자"
    return label
}()
override func viewDidLoad() {
    super.viewDidLoad()
    
    view.addSubview(textLabel)
    textLabel.frame = CGRect(x: 50,
                             y: 300,
                             width: view.frame.size.width - 100,
                             height: 40)
}

이와 같이 만들어주면, 현재 Lable 높이 만큼만 표시되고 나머지 글들은 잘리게 됩니다.

 

 

sizeToFit을 사용해 봅시다.

 

여기서 콘텐츠는 Label의 text겠죠?

sizeToFit을 사용하면, 글자 공간에 딱 맞게 Label의 크기를 자동으로 조절해 줍니다.

override func viewDidLoad() {
    super.viewDidLoad()
    
    view.addSubview(textLabel)
    textLabel.frame = CGRect(x: 50,
                             y: 300,
                             width: view.frame.size.width - 100,
                             height: 40)
    // 👉 컨텐츠에 딱 맞게 크기 조절                         
    textLabel.sizeToFit()

}

콘텐츠에 맞게 Width, Height가 변경이 됩니다.

 

 

sizeThatFits

이 메서드는 콘텐츠 크기와 주어진 Size 내에서, 가장 적절한 크기로 만들어 줍니다.

 

원하는 너비로 조절을 해봅시다.

override func viewDidLoad() {
    super.viewDidLoad()
    
    view.addSubview(textLabel)
    textLabel.frame = CGRect(x: 50,
                             y: 300,
                             width: view.frame.size.width - 100,
                             height: 40)
    
    // 너비는 50이고 높이는 최대값으로 설정
    let newSize = textLabel.sizeThatFits(CGSize(width: 50,
                                                height: CGFloat.greatestFiniteMagnitude))
    
    textLabel.frame.size = newSize
}

 

이번엔 자동으로 Height만 잡아주고 Width는 기존과 같게 만들어 보겠습니다.

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .lightGray
    
    view.addSubview(textLabel)
    textLabel.frame = CGRect(x: 50,
                             y: 300,
                             width: view.frame.size.width - 100,
                             height: 40)
    
    // 기존 너비와 같이 고정 시키고 싶을 때
    let fixedWidth = textLabel.frame.size.width
    
    // 자동으로 높이만 조절하려면 오직 height 속성만 필요 (여기선 width 값은 사용하지 않으니 아무 값이나 사용)
    let newSize = textLabel.sizeThatFits(CGSize(width: 0,
                                                height: CGFloat.greatestFiniteMagnitude))
    
    
    textLabel.frame.size = CGSize(width: fixedWidth, height: newSize.height)
}

 

이렇게, 텍스트에 따라 동적으로 Height 값을 조절하는 방법을 알아봤습니다.

 

 

참고

https://stackoverflow.com

 

 

반응형
profile

Danny의 iOS 컨닝페이퍼

@Danny's iOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!