@IBInspectable, @IBDesignable, Auto Font Size
늦은 밤이지만 너무나 감격스런 마음에 포스팅을 올리게 된다.
지난 몇일(1주일)정도 왜 아이폰은 안드로이드처럼 SP를 지원을 안 하는가에 대해서 생각하면서
하나의 폰트 사이즈로 3.5, 4, 4.7, 5.5를 어떻게 보여주어야 하나.
이걸 코드로 쓴다면 얼마나 하드코딩이 될 것이며 얼마나 힘들까 생각했다.
그렇게 구글링으로 헤메기를 반복하다가 드디어 해답을 깨달았다.
정말 왠만하게 해결되기 어려운 질문이 아니면 스택오버플로에 질문을 안 쓰지만, 이건 영영 해결 못 하겠다 해서 질문을 올렸다.
스택오버플로 질문글
스택오버플로에 적힌 답변글에서 힌트를 얻게 되어서 결국 답을 찾게 되었다.
결론은 클래스를 기기별로 만들기로 하였다.
import UIKit
class UILabelDeviceClass : UILabel {
@IBInspectable var iPhoneFontSize:CGFloat = 0 {
didSet {
overrideFontSize(iPhoneFontSize)
}
}
func overrideFontSize(fontSize:CGFloat){
let currentFontName = self.font.fontName
var calculatedFont: UIFont?
let bounds = UIScreen.mainScreen().bounds
let height = bounds.size.height
switch height {
case 480.0:
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.7)
self.font = calculatedFont
break
case 568.0:
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.8)
self.font = calculatedFont
break
case 667.0:
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.9)
self.font = calculatedFont
break
case 736.0:
calculatedFont = UIFont(name: currentFontName, size: fontSize)
self.font = calculatedFont
break
default:
print("not an iPhone")
break
}
}
}