/DTFont

DynamicTypeFont helper. Easy creation, custom font etc.

Primary LanguageSwiftMIT LicenseMIT

GitHub releaseBuild StatusLanguageCarthage CompatibleCocoaPods  Compatible

DTFont

DynamicTypeFont helper. Easy creation, custom font, auto update etc.

gif

Features

  • Custom dynamic type font available.
  • easy creation and powerful initializer (See Usage).
  • Useful extension for UILabel, UITextField, UITextView, UIButton. update automatically dynamic type font when UIContentSizeCategory changed in Setting.app.

Usage

Create custom dynamic type font

import DTFont

// use UIFontTextStyle
_ = DTFont.make(with: "Avenir-Book", textStyle: .body)

// use DTSize (DTSize is a enum wrapped UIContentSizeCategory
_ = DTFont.make(with: "Avenir-Book") { size -> CGFloat in
    switch size {
    case .xs ... .l:
        return 18.0
    case .xl ... .xxxl:
        return 22.0
    default:
        return 24.0
    }
}

// use DTSize and comparision operator
_ = DTFont.make(with: "Avenir-Book") { size in size < .xl ? 18.0  : 22.0 }
_ = DTFont.make(with: "Avenir-Book") { $0 < .xl ? 18.0  : 22.0 }

FontUpdater

If a user change UIContentSieCategory in Setting.app ([Accessibility] -> [Large Text]), dynamic type font must be updated manually.
DTFontUpdater is a class that subscribe UIContentSizeCategoryDidChange notification.

import DTFont

class ViewControlelr: UIViewController {

    @IBOutlet private weak var label: UILabel!

    private lazy var updater = DTFontUpdater()

    override func viewDidLoad() {
        super.viewDidLoad()
        updater.updateHandler = { [weak self] _ in
            self?.label.font = DTFont.make(with: "Avenir-Book", textStyle: .body)
        }
        // update immediately
        updater.update()
    }
}

Update automatically

If you use dynamic type font in UILabel, UITextField, UITextView, UIButton,
use enableAutomaticFontUpdate:(updateImmediately:) better than using DTFontUpdater.

class ViewControlelr: UIViewController {

    @IBOutlet private weak var label: UILabel! {
        didSet {
            label.enableAutomaticFontUpdate(with: DTFont.make(with: "Avenir-Book") { $0 < .l ? 18.0 : 22.0 })
            // if you don't want to update immediately
            label.enableAutomaticFontUpdate(with: DTFont.make(with: "Avenir-Book") { $0 < .l ? 18.0 : 22.0 }, updateImmediately: false)
        }
    }
}

Requirements

  • iOS 8.0 or later
  • Xcode 8.0
  • Swift 3.0

Installation

Carthage

  • Add the following to your Cartfile:
github 'sgr-ksmt/DTFont'
  • Then run command: $ carthage update
  • Add the framework as described.
    Details: Carthage Readme

CocoaPods

DTFont is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'DTFont'

and run pod install

Communication

  • If you found a bug, please open an issue. 🙇
  • Also, if you have a feature request, please open an issue. 👍
  • If you want to contribute, submit a pull request.:muscle:

License

DTFont is under MIT license. See the LICENSE file for more info.