티스토리 뷰
iPhone 기기 별 Font Size 동적으로 적용하기
Record |
|
작성일 |
2019. 09. 23 (월) |
Swift 버전 |
Swift 5 |
Xcode 버전 |
10.3 |
안녕하세요.
Fury입니다 :]
제가 공모전 참여를 위해서
프로젝트를 하고 있는데요.
하다 보니까 기계 별로 차이가 너무 심해서...
특히 저는 제 휴대폰 기종인
iPhone XS를 기준으로
코딩을 했는데
iPhone SE에서 보면 완전... 망...ㅋㅋㅋㅋ
그래서!!!!
오늘은 iPhone 기기별 font 사이즈 변경을 해볼 거예요.
1. UILabel Extension을 활용한 Font 사이즈 조정 |
화면에 뿌려지는 Text들은 대부분 UILabel로 이루어져 있죠??
버튼도 결국은 UILabel을 상속해서
Text 속성을 가지고 있습니다!!
그래서 UILabel을 Extension 해서
어디에서든지 사용할 수 있도록 하는 코드를 만들어 봤어요.
그전에!
휴대폰 기종 별 대응이니깐,
휴대폰의 사이즈를 알아보도록 할게요.
3.5 inch | 4 inch | 4.7 inch | 5.5 inch | 5.8 inch | 6.1 inch | 6.5 inch | |
기종(iPhone) | 3, 4s | 5, SE | 6, 6s, 7, 8 | 6s, 6s+, 7+, 8+ | X, XS | XR | XS MAX |
height | 480.0 | 568.0 | 667.0 | 736.0 | 812.0 | 896.0 | 896.0 |
제가 알아본 바로는 위와 같은데
틀릴 경우 말씀해주세요..ㅠㅠ
그리고 신기한 건 XR은 6.1inch고 XS Max는 6.5inch인데
화면 내의 height는 같은 896.0 이더라고요..
그럼, 이제 진짜 코드를 보도록 할게요.
extension UILabel { | |
func dynamicFont(fontSize size: CGFloat, weight: UIFont.Weight) { | |
let currentFontName = self.font.fontName | |
var calculatedFont: UIFont? | |
let bounds = UIScreen.main.bounds | |
let height = bounds.size.height | |
switch height { | |
case 480.0: //Iphone 3,4S => 3.5 inch | |
calculatedFont = UIFont(name: currentFontName, size: size * 0.7) | |
resizeFont(calculatedFont: calculatedFont, weight: weight) | |
break | |
case 568.0: //iphone 5, SE => 4 inch | |
calculatedFont = UIFont(name: currentFontName, size: size * 0.8) | |
resizeFont(calculatedFont: calculatedFont, weight: weight) | |
break | |
case 667.0: //iphone 6, 6s, 7, 8 => 4.7 inch | |
calculatedFont = UIFont(name: currentFontName, size: size * 0.92) | |
resizeFont(calculatedFont: calculatedFont, weight: weight) | |
break | |
case 736.0: //iphone 6s+ 6+, 7+, 8+ => 5.5 inch | |
calculatedFont = UIFont(name: currentFontName, size: size * 0.95) | |
resizeFont(calculatedFont: calculatedFont, weight: weight) | |
break | |
case 812.0: //iphone X, XS => 5.8 inch | |
calculatedFont = UIFont(name: currentFontName, size: size) | |
resizeFont(calculatedFont: calculatedFont, weight: weight) | |
break | |
case 896.0: //iphone XR => 6.1 inch // iphone XS MAX => 6.5 inch | |
calculatedFont = UIFont(name: currentFontName, size: size * 1.15) | |
resizeFont(calculatedFont: calculatedFont, weight: weight) | |
break | |
default: | |
print("not an iPhone") | |
break | |
} | |
} | |
private func resizeFont(calculatedFont: UIFont?, weight: UIFont.Weight) { | |
self.font = calculatedFont | |
self.font = UIFont.systemFont(ofSize: calculatedFont!.pointSize, weight: weight) | |
} | |
} |
dynimicFont라는 함수를 만들고 있어요.
size와 weight를 함께 받아서 처리하고 있습니다.
여기서 중요한 것은 size죠?
기종별로 높이를 switch 문으로 분기 처리하고 있습니다.

그리고 그 안에서 위의 UIFont를 초기화하고 있어요.
그리고 init의 fontSize 파라미터에
argument로 받았던(우리가 넣어 준) fontSize를 넣는데!!
기종별로 그 비율을 조절하는 겁니다.

저 같은 경우,
iPhone 3, 4S(3.5inch) 휴대폰은
XS 기준으로 준 font에서
0.7배로 사이즈를 줄이고 있어요.
이런 식으로 UILabel의 extensiobn을 해놓고
실제로 Label의 dynamicFont를 호출해서 사용하면 됩니다.

그러면, 여기서 Label의 text들은 휴대폰 별로 잘 조정이 될 텐데..
Autolayout으로 잡아준 버튼의 사이즈가 문제가 되네요..
위의 문제도
대응하는 코드를 만들고
다음 블로그에서 포스팅하도록 하겠습니다.
감사합니다 :]
'개발 > iOS' 카테고리의 다른 글
[Xcode] Xcode 사라진 시뮬레이터 추가하기 (0) | 2019.10.01 |
---|---|
[Swift/Xcode] Xcode에서 iPhone 시뮬레이터 좌표 변경하기 (0) | 2019.09.25 |
[Swift] Label text 부분적으로 색상 변경하는 방법 (0) | 2019.09.19 |
[Swift] iOS http 통신 허용하는 방법 (0) | 2019.09.17 |
[Swift] Extension UIColor 사용하기!! (1) | 2019.09.04 |
- Total
- Today
- Yesterday
- error
- signinwithapple
- swift 문자열
- 공유하기 한국어
- firebase
- presentingViewController
- TableView
- SWIFT
- 키크론K2
- Kakao
- UITextField 멀티라인
- Xcode
- Sign in with Apple
- 문자열나누기
- ios
- GIF
- ModalPresentaionStyle
- swift fcm
- iOS13
- Swift GoogleMap
- Android
- TextField Padding
- 앱스토어 커넥트
- Swift Target Version
- 애플로그인
- 안드로이드
- ActivityViewController
- 앱커넥트
- 카카오 로그인
- xcode11
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |