Thanks to, Hyungyu Kim
์ฌ์ฉ์๊ฐ ์ง์ ํ ํ
์คํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ๋ณํ๋ ๊ฒ
์ค์ > ๋์คํ๋ ์ด ๋ฐ ๋ฐ๊ธฐ > ํ
์คํธ ํฌ๊ธฐ
์ฑ ๋ด์ Dynamic Type์ ์ ์ฉํ์ง ์์ผ๋ฉด ๊ธฐ๊ธฐ์์ ํ
์คํธ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋๋ฐ ์ ์ฉ์ด ๋์ง ์์ต๋๋ค.
์ค์ > ์์ฌ์ด ์ฌ์ฉ > ๋์คํ๋ ์ด ๋ฐ ํ
์คํธ ํฌ๊ธฐ > ๋ ํฐ ํ
์คํธ
์ถ๊ฐ๋ก 5๊ฐ์ ๋ ํฐ ์ฌ์ด์ฆ๋ ์ ํํ ์ ์๊ฒ ๋ฉ๋๋ค.
HIG ๋ฌธ์์์ ๋งํ๋ Dynamic Type
Dynamic Type ์ ๊ธ์๋ฅผ ์ฝ๋์ด๊ฐ ์ ํธํ๋ ํ
์คํธ ์ฌ์ด์ฆ๋ฅผ ์ ํํ ์ ์๋๋ก ์ถ๊ฐ์ ์ธ flexibility(์ ์ฐ์ฑ)์ ์ ๊ณตํฉ๋๋ค.
Dynamic Type ์ xSmall, Small, Medium, Large(Default), xLarge, xxLarge, xxxLarge ์ด๋ ๊ฒ ์ด 7๊ฐ์ง ์ฌ์ด์ฆ๋ฅผ ์ ๊ณตํฉ๋๋ค.
โข
Dynamic Type ์ ๋ฐ๋ฅธ ํ
์คํธ ์คํ์ผ์ weight, size, leading(ํ๊ฐ)
โข
์์คํ
์ ์ ๊ทผ์ฑ์ด ํ์ํ ์ฌ์ฉ์๋ค์ ์ํด์ ๋ ํฐ ํฌ๊ธฐ์ ์ฌ์ด์ฆ๋ ์ ๊ณต
์ถ์ฒ:
WWDC ์์ ๋ฐํํ ๋ Dynamic Type ์ ์ ์ฉํ๊ธฐ ์ํ ์ธ ๊ฐ์ง ๋ชฉํ๋ฅผ ์ ์ํด์ค๋๋ค.
โข
Text is large enough for the user to read
โข
Text is fully readable
โข
App UI looks beautiful
1.Fitting Large Text on Screen
ํฐ์ ํ
๋๋ฆฌ๊ฐ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ์ฌ์ด์ฆ๋ผ๊ณ ํด๋ณผ๊น์?
ํฐํธ์ฌ์ด์ฆ๋ฅผ ํค์ฐ๋ฉด ์ด๋ ๊ฒ ์ฌ์ด์ฆ ๋ฐ์ผ๋ก ๊ธ์๊ฐ ๋๊ฐ๋ฒ๋ฆฝ๋๋ค.
๋ง์ค์ ์ต์
์ ๋ฃ์ด๋ ํ
์คํธ๊ฐ ๋ค ์ฝํ์ง ์์ง์!
์ด๋๋ multiple lines ๋ฅผ ์ค์ ํด์ ๋ณด์ฌ์ฃผ๋ผ๊ณ ํฉ๋๋ค.
2.Avoid Constant Values Based on Default Text Size
ํ
์คํธ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์์๊ฐ์ ํฐํธ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ฉด์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒน์น๋ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
(์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ top๊ณผ bottom ์ผ๋ก ์คํ ๋ ์ด์์์ ์ก๋๋ฐ ์ด๊ฑด ๋ฌธ์ ๊ฐ ๋์ง ์์์)
๊ทธ๋์ First Label ์ First Baseline ๊ณผ Second Label ์ Last Baseline ์ ๊ธฐ์ค์ผ๋ก ์คํ ๋ ์ด์์์ ์ก์์ฃผ๋ผ๊ณ ํฉ๋๋ค.
์ฝ๋)
์คํ ๋ ์ด์์์ด ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๊ณ ์๋ค๋ฉด
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํด์ฃผ๋ฉด ๋ฉ๋๋ค.
3.Side-By-Side Text
์ด๋ฒ์๋ ๋
ธ๋์ ๋ฐ์ค๊ฐ ์ฌ์ฉ์๊ฐ ๋ณด๋ ์คํฌ๋ฆฐ์ด๋ผ๊ณ ํด๋ด
์๋ค.
ํฐํธ๋ฅผ ํค์ฐ๊ฒ ๋๋ฉด ์ด๋ ๊ฒ ๋ฉ๋๋ค..!
์ฐ๋ฆฌ์ ๋ชฉํ fully readable ์ ๋ง์ง ์์ผ๋ multiple lines ๋ฅผ ์ ์ฉํด์ค๋๋ค.
๋ชฉํ์์ looks beautiful ์ด๋ผ๊ณ ํ์ผ๋ ์ด๋ ๊ฒ vertical ํ๊ฒ ๋ฐฐ์นํ๋ ๊ฒ์ ๋ ์ถ์ฒํ๋ค๊ณ ํฉ๋๋ค.
์ฝ๋๋ก ์ ์ฉํ๊ธฐ
struct PostView: View {
let post: Post
var body: some View {
VStack(alignment: .leading) {
Image(post.image)
Text(post.title)
.font(.headline)
Text(post.time)
.font(.subheadline)
Text(post.body)
.font(.body)
}
}
}
// iOS 14 +
Text("Scaling")
.font(.custom("Georgia", size: 24, relativeTo: .headline))
Swift
๋ณต์ฌ
ํฐํธ ์ฌ์ด์ฆ ๊ตฌํ๊ธฐ
preferredContentSizeCategory ๋ก ์ฌ์ฉ์์ ํฐํธ์ฌ์ด์ฆ๋ฅผ ๊ตฌํ ์ ์์ด์.
struct ContentView: View {
@Environment(\.sizeCategory) var sizeCategory: ContentSizeCategory
let largeSizeCategories: [ContentSizeCategory] = [.extraExtraLarge,
.extraExtraExtraLarge,
.accessibilityMedium,
.accessibilityLarge,
.accessibilityExtraLarge,
.accessibilityExtraExtraLarge,
.accessibilityExtraExtraExtraLarge]
var body: some View {
Group {
if largeSizeCategories.contains(sizeCategory) {
VStack {
Text("Pizza, bananas, donuts")
Text("Io, Europa, Ganymede")
}
} else {
HStack {
Text("Pizza, bananas, donuts")
Text("Io, Europa, Ganymede")
}
}
}
}
}
Swift
๋ณต์ฌ
Dynamic Type ์ฝ๊ฒ ํ ์คํธํ๊ธฐ
Simulator
WWDC 2019 - Visualย Designย andย Accessibility ์์ Accessibility ๋ฅผ ์๊ฐํ๋ฉด์ Dynamic Type ์ ํ
์คํธํ๋ ๋ฐฉ๋ฒ์ ์ธ๊ธํ์ต๋๋ค.
Xcode > Open Developer Tool > Accessibility Inspector
โข
์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ค์ ํด์ฃผ๊ณ ์ฐ์ธก ์๋จ์ ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด ์๋ฎฌ๋ ์ดํฐ์ Dynamic Type ์ ์์ฝ๊ฒ ์ค์ ํ ์ ์์ด์.
์ถ์ฒ :






















