반응형
오늘은 swiftui에서 커스텀 폰트를 지정해서 사용하는 방법에 대해 정리하겠습니다.
1. Font 등록하기
폰트를 등록하기 전에,
먼저 폰트를 프로젝트에 복사해 줍니다.
이 때 어느 그룹에 넣어서 관리하건 문제되지 않습니다.
그룹은 단순히 논리적인 구조로 실제하는 물리적 구분이 아니기 때문입니다.
그럼 이제 프로젝트 설정에서 아래와 같은 순서로,
Font를 등록해 줍니다.
- 좌측의 네비게이터에서 최상단의 프로젝트 선택
- 'Info' 탭 클릭
- 여러 섹션 중, 맨 위의 'Custom iOS Target Properties' 섹션 열기
- "+" 버튼을 클릭하여 새 항목을 추가
- 키 이름으로 'Fonts provided by application' 검색해 선택 후 아이템 추가(배열 타입<Array>임)
- 배열 항목 옆의 "+" 버튼을 클릭하여 첫 번째 항목 추가
- 값에 폰트 파일명 입력 (예: "NanumSquareR.ttf")
- 필요한 모든 폰트 파일에 대해 반복
광고
2. PostScript이름 알아내기
ios에서 코드로 커스텀 폰트를 등록할 때,
폰트의 postScript이름을 알아내야 합니다.
아래와 같이,
폰트 정보를 출력하도록 해 줍니다.
@main
struct MyApp: App {
init() {
// 모든 폰트 정보 출력
for family in UIFont.familyNames.sorted() {
print("Family: \(family)")
for name in UIFont.fontNames(forFamilyName: family) {
print(" Font: \(name)")
}
}
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
실행해보면, 아래와 같이 실행되는 것을 볼 수 있습니다.
폰트파일명과는 다른 것을 확인 할 수 있는데요.
광고
이제 이것을 가지고 아래에서 등록해 사용해 줍니다.
2. Text 확장
아래와 같이 Text를 확장해서,
커스텀 폰트를 디폴트로,
import SwiftUI
extension Text {
func primaryFont(size: CGFloat = 16, weight: Font.Weight = .regular) -> Text {
self.font(.custom("NanumSquareR", size: size).weight(weight))
}
func headerFont() -> Text {
self.font(.custom("NanumSquareR", size: 24).weight(.bold))
}
func bodyFont() -> Text {
self.font(.custom("NanumSquareR", size: 16))
}
func captionFont() -> Text {
self.font(.custom("NanumSquareR", size: 12))
}
}
광고
이렇게 정의한 폰트는, 아래와 같이 사용할 수 있습니다.
Text("제목").headerFont()
Text("본문").bodyFont()
Text("특수 크기").primaryFont(size: 20, weight: .semibold)
만약 제대로 로딩되었는지 아래와 같이 확인해보고,
이상이 없다면 true가 반환될 것입니다.
let fontLoaded = UIFont(name: "NanumSquareR", size: 16) != nil
print("NanumSquareR is loaded: \(fontLoaded)")
3. Font를 확장하면 안될까?
참고로 Text가 아니라,
Font를 확장하는 경우도 생각해 볼 수 있을텐데요.
다만 Font를 확장해 사용할 경우,
기존의 시스템 폰트와 충돌해,
아래와 같은 에러가 발생할 수 있으니, 주의가 필요합니다.
728x90
'iOS, Swift > SwiftUI' 카테고리의 다른 글
SwiftUI body에 사용할 수 없는 것과 대안들 : 변수선언, 조건문, 반복문 (0) | 2025.03.22 |
---|---|
SwiftUI 빈 공간에 사용하는 Color.clear 와 EmptyView (0) | 2025.03.19 |
댓글