SwiftUI 기본 뷰 컴포넌트

2021년 11월 5일 수정

Text

기본

이름처럼 텍스트(혹은 라벨)를 출력하는 뷰다.

Text("some text")

텍스트 스타일

+ 오퍼레이터를 이용해 Attributed Text 대신 사용할 수도 있다.

Text("foo").foregroundColor(Color.red)
+ Text("bar").foregroundColor(Color.blue)

이 밖에도 인터폴레이션으로 Text 오브젝트를 처리할 수 있다.

Text("\(Text(name).bold()) foo bar")

비슷하게 이미지를 넣을 수 있다.

Text("\(Image(systemNamed: "music.mic")) foo bar")
  .font(.custom("FontName", size: 15))

멀티라인

lineLimit 을 이용해 멀티라인 텍스트 뷰를 생성할 수 있다. 값을 nil 로 지정해서 무제한 멀티라인을 지원할 수도 있다.

Text("...")
    .lineLimit(nil)

위처럼 다 풀어버리면 멀티라인 텍스트 표시가 자유롭긴 하겠지만 레이아웃 맞추기는 좀 어려울 수도 있다. 이럴 때는 한 축의 크기를 고정시키는 방법도 가능하다.

Text("...")
    .lineLimit(nil)
    .frame(height: 46)
    .fixedSize(horizontal: false, vertical: true)

위는 세로 크기를 고정시켜서 멀티라인 표시를 약간 제한하는 텍스트 뷰가 생성시키는 코드다.

시간

Xcode 11.5부터 시간 관련 기능이 추가되었다.

Text(Date().addingTimeInterval(600), style: .relative)

style에는 이 외에 .date, .time, .timer 등 다양한 옵션이 있다.

텍스트 선택 가능

기본적으로 텍스트 뷰의 텍스트는 macOS에서 영역 선택이 되지 않는데 iOS 15 혹은 macOS 12 Monterey 이후부터는 .textSelection() 속성을 사용해서 해결할 수 있다.

// iOS 15.0+, macOS 12.0+
Text("foobar").textSelection(.enabled)

구버전의 경우 텍스트 선택을 지원하려면 일단 돌려서 TextField 를 사용해보자. 물론 이 경우 에디팅이 가능한 필드가 표시된다는 점에 유의하자.