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 을 손쉽게 설정할 수 있어요.
출처 :