iOS/UIKit

preferredMaxLayoutWidth

Hamp 2025. 8. 26. 21:19
반응형

🏁 학습할 내용

  • 정의
  • 예시 코드

📌 정의

 

다중 라인에서 줄바꿈이 일어나는 최대 너비

  • 평소에는 건드릴일 많이 없음, 특히 numberOfLine = 1일때는 쓸일 없음
  • 보통은, layout 너비를 따라감
  • intrinsicContentSize 계산에도 큰 영향을 끼침
  • 줄바꿈 너비가 변경되면, 높이자체가 바뀌니깐

🤖 예제 코드

 

스택뷰에 2개의 Label을 넣고, 값을 줬을 떄는, stackView너비를 꽉채우게 늘어났는데

 

두번째 Label의 preferredMaxLayoutWidth 값을 130으로 주니깐, 130을 기준으로 줄바꿈이 들어가는걸 확인할 수 있다.

import UIKit

class ViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white

    let label1 = makeLabel(text: "preferredMaxLayoutWidth를 지정하지 않은 UILabel입니다. WWWWWWWWWWWWWWWWWWWW")
    label1.backgroundColor = .yellow

    let label2 = makeLabel(text: "preferredMaxLayoutWidth를 지정하지 않은 UILabel입니다. WWWWWWWWWWWWWWWWWWWW")
    label2.backgroundColor = .green

    // preferredMaxLayoutWidth 지정 (200pt로 제한)
//    label1.preferredMaxLayoutWidth = 100
//    label2.preferredMaxLayoutWidth = 130

    let stackView = UIStackView(arrangedSubviews: [label1, label2])
    stackView.axis = .vertical
    stackView.spacing = 40
    stackView.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(stackView)

    NSLayoutConstraint.activate([
      stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 40),
      stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
      stackView.trailingAnchor.constraint(lessThanOrEqualTo: view.trailingAnchor, constant: -10),
    ])
  }

  private func makeLabel(text: String) -> UILabel {
    let label = UILabel()
    label.numberOfLines = 0 // 여러 줄 허용
    label.text = text
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
  }
}

출처

https://developer.apple.com/documentation/uikit/uilabel/preferredmaxlayoutwidth

 

preferredMaxLayoutWidth | Apple Developer Documentation

The preferred maximum width, in points, for a multiline label.

developer.apple.com

 

반응형