How to honor Dynamic Type Accessibility Sizes with a custom font in an iOS storyboard

后端 未结 3 748
我在风中等你
我在风中等你 2021-02-19 07:27

How can I use the dynamic type text style \"Title 1\" and set the font face to the built-in font Chalkboard SE for a UILabel in a storyboard?

I need to honor the Dynamic

3条回答
  •  星月不相逢
    2021-02-19 07:47

    We have to add all the extension of related UIFramework for which we have to use dynamic font size of custom font in iOS-11+ such as UILabel, UIButton, UITextField, UITextView. Code is given in swift 4.2. We just need to use these custom classes instead of native ios classes to see effect of dynamic fonts in app.

    Here first is Label:

    class AppLabel: UILabel {
    
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if #available(iOS 11.0, *)  {
    
            self.font = UIFontMetrics.default.scaledFont(for: self.font)
            self.adjustsFontForContentSizeCategory = true
            // Fallback on earlier versions
        } else {
            // Fallback on earlier versions
        }
      }
    
    }
    

    Here 2nd is UIButton:

    class AppButton: UIButton {
    
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if #available(iOS 11.0, *) {
    
            self.titleLabel?.font = UIFontMetrics.default.scaledFont(for: self.titleLabel?.font ?? UIFont())
            self.titleLabel?.adjustsFontForContentSizeCategory = true
        } else {
            // Fallback on earlier versions 
        }
      }
    }
    

    Here 3rd is UITextField:

    class AppTextField: UITextField {
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if #available(iOS 11.0, *) {
    
            self.font = UIFontMetrics.default.scaledFont(for: self.font ?? UIFont())
            self.adjustsFontForContentSizeCategory = true
        } else {
            // Fallback on earlier versions
        }
      }
    }
    

    Last one in UITextView:

    class AppTextView: UITextView {
    
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if #available(iOS 11.0, *) {
    
            self.font = UIFontMetrics.default.scaledFont(for: self.font ?? UIFont())
            self.adjustsFontForContentSizeCategory = true
        } else {
            // Fallback on earlier versions
        }
      }
    }
    

提交回复
热议问题