본문 바로가기
iOS, Swift/SwiftUI

SwiftUI 커스텀 폰트(Font) 사용하기

by Developer88 2025. 3. 19.
반응형

오늘은 swiftui에서 커스텀 폰트를 지정해서 사용하는 방법에 대해 정리하겠습니다.

 

1. Font 등록하기

폰트를 등록하기 전에,

먼저 폰트를 프로젝트에 복사해 줍니다.

이 때 어느 그룹에 넣어서 관리하건 문제되지 않습니다.

그룹은 단순히 논리적인 구조로 실제하는 물리적 구분이 아니기 때문입니다.

 

그럼 이제 프로젝트 설정에서 아래와 같은 순서로,

Font를 등록해 줍니다.

  1. 좌측의 네비게이터에서 최상단의 프로젝트 선택
  2. 'Info' 탭 클릭
  3. 여러 섹션 중, 맨 위의 'Custom iOS Target Properties' 섹션 열기
  4. "+" 버튼을 클릭하여 새 항목을 추가
  5. 키 이름으로 'Fonts provided by application' 검색해 선택 후 아이템 추가(배열 타입<Array>임)
    1. 배열 항목 옆의 "+" 버튼을 클릭하여 첫 번째 항목 추가
    2. 값에 폰트 파일명 입력 (예: "NanumSquareR.ttf")
  6. 필요한 모든 폰트 파일에 대해 반복

 

 

광고

 

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

댓글