adjustsFontForContentSizeCategory不适用于UITextView和UITextField

时间:2017-10-18 23:40:01

标签: ios dynamic font-size

我正在从preferredContentSizeChanged切换到adjustsFontForContentSizeCategoryUILabelUITextView类使用UITextField。它适用于UILabel,但不适用于UITextViewUITextField。仅当我在setNeedsDisplay内拨打preferredContentSizeChanged时才有效。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

您还需要将UITextfield所使用的字体设置为可缩放:

    textField.adjustsFontForContentSizeCategory = true
    textField.font = .preferredFont(forTextStyle: .body)

答案 1 :(得分:0)

如OliverD所述,您必须将字体设置为自动调整大小的系统字体之一,并设置adjustsFontForContentSizeCategory。这将调整文本大小,但不会调整文本字段/文本视图的整体大小。

为此,您必须覆盖traitCollectionDidChange并在此处调整大小。

例如,在设置视图时:

    self.intrinsicHeight = textInput.intrinsicContentSize.height
    self.heightConstraint = textInput.heightAnchor.constraint(equalToConstant: textField.intrinsicContentSize.height)
    self.heightConstraint?.isActive = true

以及您的视图或视图控制器中的其他位置:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    let fontMetrics = UIFontMetrics(forTextStyle: .body)

    self.heightConstraint.constant = fontMetrics.scaledValue(for: self.intrinsicHeight)
}