티스토리 뷰
728x90
반응형
기본폰트 커스텀폰트로 설정
1.프로젝트 내에 폰트를 복사하고 Target Membership 설정하기
2.info.plist 수정
textLabel.font = UIFont(name: "customfont", size: 17)
같은 방법으로 확장자를 제외하고 사용하면된다.
3.이제 기본폰트로 설정해보자
Extension.swift 에서 설정
import Foundation
import UIKit
struct AppFontName {
static let regular = "NanumMyeongjo-Regular"
static let bold = "NanumMyeongjo-Bold"
static let italic = "SpoqaHanSans-Italic"
}
extension UIFontDescriptor.AttributeName {
static let nsctFontUIUsage = UIFontDescriptor.AttributeName(rawValue: "NSCTFontUIUsageAttribute")
}
extension UIFont {
@objc class func mySystemFont(ofSize size: CGFloat) -> UIFont {
return UIFont(name: AppFontName.regular, size: size)!
}
@objc class func myBoldSystemFont(ofSize size: CGFloat) -> UIFont {
return UIFont(name: AppFontName.bold, size: size)!
}
@objc class func myItalicSystemFont(ofSize size: CGFloat) -> UIFont {
return UIFont(name: AppFontName.italic, size: size)!
}
@objc convenience init(myCoder aDecoder: NSCoder) {
if let fontDescriptor = aDecoder.decodeObject(forKey: "UIFontDescriptor") as? UIFontDescriptor {
if let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String {
var fontName = ""
switch fontAttribute {
case "CTFontRegularUsage":
fontName = AppFontName.regular
case "CTFontEmphasizedUsage", "CTFontBoldUsage":
fontName = AppFontName.bold
case "CTFontObliqueUsage":
fontName = AppFontName.italic
default:
fontName = AppFontName.regular
}
self.init(name: fontName, size: fontDescriptor.pointSize)!
}
else {
self.init(myCoder: aDecoder)
}
}
else {
self.init(myCoder: aDecoder)
}
}
class func overrideInitialize() {
if self == UIFont.self {
let systemFontMethod = class_getClassMethod(self, #selector(systemFont(ofSize:)))
let mySystemFontMethod = class_getClassMethod(self, #selector(mySystemFont(ofSize:)))
method_exchangeImplementations(systemFontMethod!, mySystemFontMethod!)
let boldSystemFontMethod = class_getClassMethod(self, #selector(boldSystemFont(ofSize:)))
let myBoldSystemFontMethod = class_getClassMethod(self, #selector(myBoldSystemFont(ofSize:)))
method_exchangeImplementations(boldSystemFontMethod!, myBoldSystemFontMethod!)
let italicSystemFontMethod = class_getClassMethod(self, #selector(italicSystemFont(ofSize:)))
let myItalicSystemFontMethod = class_getClassMethod(self, #selector(myItalicSystemFont(ofSize:)))
method_exchangeImplementations(italicSystemFontMethod!, myItalicSystemFontMethod!)
let initCoderMethod = class_getInstanceMethod(self, #selector(UIFontDescriptor.init(coder:))) // Trick to get over the lack of UIFont.init(coder:))
let myInitCoderMethod = class_getInstanceMethod(self, #selector(UIFont.init(myCoder:)))
method_exchangeImplementations(initCoderMethod!, myInitCoderMethod!)
}
}
}
AppDelegate.swift 에서 설정
override init() {
super.init()
UIFont.overrideInitialize()
}
에러 - 커스텀 폰트가 제대로 적용되지 않았다면?
SceneDelegate.swift
파일의 scene(_:willConnectTo:options:)
메서드 아래에 코드를 추가해서 폰트 네임을 확인해주자
for fontFamily in UIFont.familyNames {
for fontName in UIFont.fontNames(forFamilyName: fontFamily) {
print(fontName)
}
}
이렇게 NanumMyeongjo 를 추가한 폰트 파일 네임과 폰트 네임이 다르기 때문에 적용이 되지 않았던 것이다.
728x90
반응형
'iOS' 카테고리의 다른 글
iOS) UITableView cell selectedBackground (0) | 2021.07.22 |
---|---|
iOS) UIPageViewController 사용해보기 (0) | 2021.07.21 |
iOS) SubView 제거 (0) | 2021.07.21 |
iOS) UITableView 당겨서 새로고침 (0) | 2021.07.21 |
iOS) Core Data (0) | 2021.07.21 |
댓글
TAG
- MVVM
- Swift
- YPImagePicker
- MOYA
- async/await
- WidgetKit
- configurable widget
- watchOS
- WWDC22
- github
- Widget
- rxswift
- SwiftUI
- 2022 KAKAO TECH INTERNSHIP
- RxCocoa
- Protocol
- projectsetting
- Algorithm
- OpenSourceLibrary
- IOS
- Objective-C
- WWDC
- CloneCoding
- 서버통신
- APNS
- urlsession
- UserDefaults
- containerBackground
- Firebase
- Notification
최근에 올라온 글
최근에 달린 댓글
글 보관함
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
링크
- Total
- Today
- Yesterday