[iOS] attributed Text (with. Dynamic Type)

loganberry·2020년 12월 3일
1

Apple의 UIFont가 제공하는 _preferredFont_을 사용하면 따로 굵기를 지정할 수 없고 지정된 font만 사용해야 합니다.
반대로 _systemFont_를 사용한다면 Dynamic Type (Automatically adjusts font: 사용자 설정에 따른 폰트 크기 변경)이 동작하지 않습니다.

extension을 사용해서 굵기를 지정해도 Dynamic Type을 지원하는 method를 구현할 수 있습니다.

extension UIFont {
    static func preferredFont(for style: TextStyle, weight: Weight) -> UIFont {
        let metrics = UIFontMetrics(forTextStyle: style)
        let desc = UIFontDescriptor.preferredFontDescriptor(withTextStyle: style)
        let font = UIFont.systemFont(ofSize: desc.pointSize, weight: weight)
        return metrics.scaledFont(for: font)
    }
}
  1. preferredFont의 Style과 폰트 굵기를 파라미터로 받고, UIFont를 return하는 함수를 만듭니다.
  2. UIFontMetrics 인스턴스를 하나 생성합니다. (지정한 폰트가 다이나믹 타입을 지원하도록 해주는 유틸리티 객체)
  3. UIFontDescriptor.preferredFontDescriptor(withTextStyle:)에 파라미터로 전달할 Style 폰트의 속성을 가져옵니다.
  4. systemFont를 사용해 사이즈와 굵기를 전달하고, metrics.scaledFont(for: font) 값을 리턴합니다.

adjustsFontForContentSizeCategory = true

위에서 만든 method를 사용해도 크기 변화가 없다면, 스토리보드의 Dynamic Type - Automatically adjusts Font 체크를 확인해야 하고, 스토리보드에서 확인할 수 없다면 아래 코드를 추가합니다.

Label.adjustsFontForContentSizeCategory = true
profile
iOS개발자 꿈나무

0개의 댓글