use*_*638 7 objective-c uifont ios autolayout
我正在尝试创建一个视图,根据其父视图的高度缩放特定的UILabel.在故事板中,我将自动收缩选项设置为"最小字体大小"为值8,行数为1.但是,我注意到如果我将行数设置为1,则字体大小不会适应.如果我将行数设置为0,则会发生自动收缩,但字体大小小于我为4.0"显示指定的147大小.
(上):左:num行= 1,右:在3.5"显示器上的num行= 0
(下):左:num行= 1,右:4.0行显示上的num行= 0

理想情况下,我希望4.0英寸屏幕的字体大小为147,并使其能够在3.5英寸显示屏上缩小.
我的理解是,如果你设置numberOfLines到1时,标签会自动收缩基于宽度,高度不.这应该解释左上角的图像.
至于右下角的图像,我会尝试增加标签的高度.它将根据文本的内在内容大小自动收缩,因此看起来字体大小为147的内容高度当前高于您在较高屏幕中的标签高度.
自动收缩似乎仅在宽度小于需要时才适用,而在高度不足时则不适用。
我用自定义子类解决了这个问题:
class HeightAutoShrinkingLabel: UILabel {
override func layoutSubviews() {
super.layoutSubviews()
while self.font.pointSize > 1 {
if self.intrinsicContentSize.height <= self.frame.height {
// Fits
break
}
self.font = self.font.withSize(font.pointSize - 1)
}
}
}
Run Code Online (Sandbox Code Playgroud)