๐๏ธ๐จย ์๋ ํ์ธ์ ์ด์์ ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ SwfitUI์ Text ๋ทฐ(View)์ ๋ํด์ ํฌ์คํ ํ๋ ค ํด์.
SwiftUI์์ Text
๋ ํ
์คํธ๋ฅผ ํ๋ฉด์ ํ์ํ๋ ๋ทฐ(view)์์. Text
๋ทฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)์ ํ
์คํธ๋ฅผ ์ถ๊ฐํ๊ณ ์์์ ์ง์ ํ ์ ์์ด์. Text ๋ทฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ ์ ์์ด์.
Text ๋ทฐ๋ SwiftUI์์ ํ ์คํธ ๊ด๋ จ ์์ ์ ์ํํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ํ ์คํธ ์์๋ฅผ ์์ฑํ๊ณ ์คํ์ผ๋งํ๋ ๋ฐ ์ ์ฉํด์.
Text ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ด์์.
import SwiftUI
struct TextBasic: View {
var body: some View {
Text("์ก์ก ๋น์ผ์ฃผ์ธ์๐๏ธ")
}
}
#Preview {
TextBasic()
}
font(_:) ๋ฉ์๋๋ฅผ ํตํด ํ
์คํธ์ ์คํ์ผ์ ์ง์ ํ ์ ์์ด์. ๋งค๊ฐ๋ณ์์ ํ์
์ Font
Struct์์. Font์ Extension์ผ๋ก ์ฌ์ ์ ์ ์๋ ์คํ์ผ์ ํ์ฉํ ์ ์์ด์.
SwiftUI์์๋ ์ฌ์ ์ ์๋ ํ ์คํธ ์คํ์ผ์ ์ฌ์ฉํ์ฌ ํ ์คํธ์ ์์์ ๊ฐํธํ๊ฒ ์ค์ ํ ์ ์์ด์. ์ฌ์ ์ ์๋ ์คํ์ผ์ ๋ค์ํ ํ ์คํธ ํฌ๊ธฐ์ ๊ธ๊ผด ๊ฐ์ค์น๋ฅผ ๊ฐ์ง๋ฉฐ, ํน์ ํ ์คํธ ์์์ ์ ํฉํ ์์์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉํด์. ์ด๋ฌํ ์คํ์ผ๋ค์ ์ฃผ๋ก iOS, macOS, watchOS ๋ฑ์ Apple ํ๋ซํผ์์ ์ฌ์ฉ๋๋ฉฐ, ํ๋ซํผ ๊ฐ ์ผ๊ด์ฑ์ ์ ๊ณตํด์.
import SwiftUI
struct TextBasic: View {
var body: some View {
VStack(alignment: .leading, spacing: 20) {
Text(".largeTitle").font(.largeTitle)
Text(".title").font(.title)
Text(".title2").font(.title2)
Text(".headline").font(.headline)
Text(".subheadline").font(.subheadline)
Text(".body").font(.body)
Text(".callout").font(.callout)
Text(".footnote").font(.footnote)
Text(".caption").font(.caption)
Text(".caption2").font(.caption2)
}
}
}
#Preview {
TextBasic()
}
.largeTitle
.title
.title2
.headline
.subheadline
.body
.callout
.footnote
.caption
์ด๋ฌํ ์ฌ์ ์ ์๋ ํ ์คํธ ์คํ์ผ์ ํ ์คํธ์ ์๋ฏธ์ ์ญํ ์ ๋ฐ๋ผ ์ ์ ํ ์์์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ๋์์ ์ค์. SwiftUI๋ ๊ฐ ํ๋ซํผ์ ๋ง๋ ๊ธฐ๋ณธ ์คํ์ผ์ ์ ๊ณตํ๋ฏ๋ก ๊ฐ๋ฐ์๋ ํ ์คํธ ์คํ์ผ์ ์๋์ผ๋ก ์ ์ํ ํ์๊ฐ ์์ด์!(๋๋ฌด ํธ๋ฆฌํด์๐) ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ด๋ฌํ ์ฌ์ ์ ์๋ ์คํ์ผ์ ์ฌ์ฉํ๋ฉด ํ ์คํธ๊ฐ ํด๋น ํ๋ซํผ์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋ณด์ฌ์.
Text(".system").font(.system(size: 20))
Text(".system").font(.system(size: 20, weight: .bold))
Text(".system").font(.system(size: 20, weight: .bold, design: .rounded))
.system
์ SwiftUI์์ ์ฌ์ฉ๋๋ ํ
์คํธ ์คํ์ผ ์ค ํ๋๋ก, ์์คํ
๊ธ๊ผด๊ณผ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํด์. ์ด ์คํ์ผ์ iOS, macOS, watchOS ๋ฑ์ Apple ํ๋ซํผ์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ๊ธ๊ผด์ ๋ํ๋ด์.
.system
ํ
์คํธ ์คํ์ผ์ ์ฌ์ฉํ๋ฉด ํ
์คํธ ํฌ๊ธฐ, ๊ตต๊ธฐ ๋ฐ ๊ธ๊ผด ๋์์ธ์ ์ค์ ํ ์ ์์ด์. ์๋ฅผ ๋ค์ด, ํน์ ํ
์คํธ๋ฅผ .system(size: 20, weight: .bold, design: .default)
๋ก ์ง์ ํ๋ฉด ํด๋น ํ
์คํธ๋ ํฌ๊ธฐ 20์ ๋ณผ๋(Bold) ๊ธ๊ผด๋ก ๋ ๋๋ง๋ผ์.
์์คํ ๊ธ๊ผด ์ฌ์ฉ ์ ์ด์ :
.system
์ ๊ฐ ํ๋ซํผ์ ๋ง๋ ์์คํ
๊ธ๊ผด์ ์๋์ผ๋ก ์ ํํ์ฌ ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํด์. ์ด๋ ํน์ ํ๋ซํผ์ ๊ณ ์ ๋ ์ฌ์ ์ ์๋ ํฐํธ์๋ ๋ฌ๋ฆฌ ์ฌ์ฉ์์ ํ๊ฒฝ ์ค์ ์ ๋ง๊ฒ ๋์ ์ผ๋ก ์กฐ์ ๋ผ์..system
์ ์ฌ์ฉํ๋ ํ
์คํธ๋ ์๋์ผ๋ก ์๋ก์ด ์์คํ
๊ธ๊ผด๊ณผ ํฌ๊ธฐ์ ๋ง์ถฐ ์
๋ฐ์ดํธํด์. ๋ฐ๋ฉด์ ์ฌ์ ์ ์๋ ํฐํธ๋ ์๋์ผ๋ก ์
๋ฐ์ดํธํด์ผ ํด์..system
์ ์ฌ์ฉํ๋ฉด ์๊ฐ์ ๋ ์ด์์ ์ธ์๋ ์ฌ์ฉ์์ ๊ธ๊ผด ํฌ๊ธฐ ์ค์ ์ ์กด์คํ ์ ์์ด์..system
์คํ์ผ์ ์ฃผ๋ก ์์คํ
๊ณผ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ํน์ ํ๋ซํผ์์ ๊ณ ์ ๋ ํฐํธ๋ณด๋ค ๋ ๋์ ์ด๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํด์.
๋ฉํฐ ๋ผ์ธ ํ ์คํธ ์ ๋ ฌ
multilineTextAlignment(_ alignment: TextAlignment)
๋ฉ์๋๋ฅผ ํตํด ์ ๋ ฌํ ์ ์์ด์..leading
: ์ผ์ชฝ์ผ๋ก ์ ๋ ฌํด์..center
: ๊ฐ์ด๋ฐ๋ก ์ ๋ ฌํด์..trailing
: ์ค๋ฅธ์ชฝ์ผ๋ก ์ ๋ ฌํด์.import SwiftUI
struct Alignment: View {
var body: some View {
VStack(alignment: .leading, spacing: 20) {
Text(".leading .leading .leading .leading .leading .leading .leading .leading .leading .leading .leading .leading .leading .leading .leading .leading ")
.multilineTextAlignment(.leading)
Text(".center .center .center .center .center .center .center .center .center .center .center .center .center .center .center .center .center .center ")
.multilineTextAlignment(.center)
Text(".trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing .trailing ")
.multilineTextAlignment(.trailing)
}
.padding(30)
}
}
#Preview {
Alignment()
}
ํ ์คํธ ์ค ๊ฐ๊ฒฉ ๋ฐ ๊ธ์ ๊ฐ๊ฒฉ ์กฐ์
lineSpacing(_ lineSpacing: CGFloat)
: ์ค ๊ฐ๊ฒฉ์ ์กฐ์ ํ ์ ์์ด์.tracking(_ tracking: CGFloat)
: ๊ธ์ ๊ฐ๊ฒฉ์ ์กฐ์ ํ ์ ์์ด์.Text("๐๏ธ ์ก์ก")
.lineSpacing(10) // ์ค ๊ฐ๊ฒฉ ์กฐ์
.tracking(2.0) // ๊ธ์ ๊ฐ๊ฒฉ ์กฐ์
ํ ์คํธ ๋ทฐ์ ํ๋ ์ ์ ํ
frame(minWidth: CGFloat? = nil, idealWidth: CGFloat? = nil, maxWidth: CGFloat? = nil, minHeight: CGFloat? = nil, idealHeight: CGFloat? = nil, maxHeight: CGFloat? = nil, alignment: Alignment = .center)
frame(width: CGFloat? = nil, height: CGFloat? = nil, alignment: Alignment = .center)
: ํ
์คํธ ๋ทฐ์ ํ๋ ์์ ์ ํํ๊ณ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์์ด์.Text("์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก ์ก์ก")
.frame(width: 150) // ๊ฐ๋ก ํฌ๊ธฐ ์ ํ
ํ ์คํธ ์ต๋ ๋ผ์ธ ๋ฐ ์๋ต ํ์
lineLimit
: ํ
์คํธ์ ์ต๋ ๋ผ์ธ ์๋ฅผ ์ง์ ํ ์ ์์ด์. ๊ธฐ๋ณธ์ ์ผ๋ก ์ต๋ ๋ผ์ธ์ ์ด๊ณผํ๊ฒ ๋๋ฉด โฆ ์ผ๋ก ํ์๋ผ์.truncationMode(_ mode: Text.TruncationMode)
: ํ
์คํธ ๋ทฐ์ ํ๋ ์์ ๋ฒ์ด๋ ๋ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์.import SwiftUI
struct LineLimit: View {
var body: some View {
VStack(spacing: 40) {
Text("์๋
ํ์ธ์. ๋ฐ๊ฐ์ต๋๋ค. Hello World. ๊ฐ๋๋ค๋ผ๋ง๋ฐ์ฌ์์์ฐจ์นดํํํ abcdefghijklnmopqrstuvwxyz")
Text("์๋
ํ์ธ์. ๋ฐ๊ฐ์ต๋๋ค. Hello World. ๊ฐ๋๋ค๋ผ๋ง๋ฐ์ฌ์์์ฐจ์นดํํํ abcdefghijklnmopqrstuvwxyz")
.lineLimit(1)
Text("์๋
ํ์ธ์. ๋ฐ๊ฐ์ต๋๋ค. Hello World. ๊ฐ๋๋ค๋ผ๋ง๋ฐ์ฌ์์์ฐจ์นดํํํ abcdefghijklnmopqrstuvwxyz")
.lineLimit(1)
.truncationMode(.head)
Text("์๋
ํ์ธ์. ๋ฐ๊ฐ์ต๋๋ค. Hello World. ๊ฐ๋๋ค๋ผ๋ง๋ฐ์ฌ์์์ฐจ์นดํํํ abcdefghijklnmopqrstuvwxyz")
.lineLimit(1)
.truncationMode(.middle)
Text("์๋
ํ์ธ์. ๋ฐ๊ฐ์ต๋๋ค. Hello World. ๊ฐ๋๋ค๋ผ๋ง๋ฐ์ฌ์์์ฐจ์นดํํํ abcdefghijklnmopqrstuvwxyz")
.lineLimit(1)
.truncationMode(.tail)
}
}
}
#Preview {
LineLimit()
}
SwiftUI์ Text ๋ทฐ์ ๋ํด์ ์์๋ณด์์ด์. ์ด๋ฒ ํฌ์คํ
์ ํตํด SwiftUI์ ๋ค๋ฅธ ๋ทฐ ๋ฐ ๊ธฐ๋ฅ๊ณผ ์กฐํฉํ์ฌ ํ๋ถํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์ฑ์ ๋ง๋ค ์ ์์์ ๊ธฐ๋ํด์. SwiftUI๋ฅผ ํตํด ์ฑ์ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ Text ๋ทฐ์ ํ์ฉ์ ํตํด ๋์ฑ ํ๋ถํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธธ ๋ฐ๋ผ์.๐