【问题标题】:UILabel does not autoshrinkUILabel 不会自动收缩
【发布时间】:2014-10-01 02:12:02
【问题描述】:

我正在尝试创建一个基于其父视图高度缩放特定 UILabel 的视图。在情节提要中,我将 Autoshrink 选项设置为“最小字体大小”,将值设置为 8,将行数设置为 1。但是,我注意到如果我将行数设置为 1,则字体大小不会调整以适应。如果我将行数设置为 0,则会发生自动收缩,但字体大小小于我为 4.0" 显示器指定的 147 大小。

(上):左:num lines = 1,右:num lines = 0 在 3.5" 显示器上

(底部):左:num lines = 1,右:num lines = 0 在 4.0" 显示器上

理想情况下,我希望 4.0" 屏幕的字体大小为 147,并使其能够在 3.5" 显示器上按比例缩小。

【问题讨论】:

  • Minimum Font Size 已弃用,您现在应该使用 Minimum Font Scale

标签: ios objective-c autolayout uifont


【解决方案1】:

我的理解是,如果将numberOfLines 设置为1,标签将根据宽度而不是高度自动收缩。这应该可以解释左上角的图像。

至于右下角的图像,我会尝试增加标签的高度。它将根据文本的内在内容大小自动缩小,因此看起来 147 的字体大小的内容高度当前高于您在较高屏幕中的标签高度。

【讨论】:

  • 我将 UILabel 的前缘和后缘设置为距父级基本上为 20。顶部和底部标签之间的空白也是中间标签的一部分,因此应该有足够的高度和宽度才能使其更大。
【解决方案2】:

自动缩小似乎只适用于宽度小于所需的宽度,而不适用于高度不足的情况。

我用自定义子类解决了这个问题:

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)
        }
    }
}

【讨论】:

    【解决方案3】:

    垂直和水平自动收缩的解决方案非常简单:

    label.font = [UIFont fontWithName:gMainFont size:label.height];
    label.minimumScaleFactor = 0.1;
    

    【讨论】:

    • 仅在宽度不足时有效。当高潮不是什么都不会发生。
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2012-02-21
    • 1970-01-01
    相关资源
    最近更新 更多