我正在从preferredContentSizeChanged
切换到adjustsFontForContentSizeCategory
,UILabel
和UITextView
类使用UITextField
。它适用于UILabel
,但不适用于UITextView
和UITextField
。仅当我在setNeedsDisplay
内拨打preferredContentSizeChanged
时才有效。
我错过了什么?
答案 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)
}