gpt4 book ai didi

swift - UILabel 在单词中间拆分(或如何获得正确的自动换行)

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:28 24 4
gpt4 key购买 nike

我正在尝试将一些文本放入固定宽度的标签中(实际上宽度取决于屏幕尺寸,但不能在应用程序内更改),并希望 UIKit 巧妙地结合使用字体大小调整和自动换行以获得正确的结果。但是,它似乎不是那样工作的。考虑具有以下约束的 UILabel:

  • 纵横比 = 1:1
  • label.width = 0.7 * parentView.width(设置所有其他相关约束,IB 中无错误或警告)

和下面的代码:

    label.font = label.font.withSize(100)
label.adjustsFontSizeToFitWidth = true
label.lineBreakMode = .byClipping
label.numberOfLines = 0
label.text = "Shooter team"

我希望它能调整文本大小并使其适合两行:“Shooter”和“team”(或者,因为文本可以是任何内容,所以将其适本地拆分为单词)。但是,当我将 label.lineBreakMode 设置为 .byWordWrapping 时,它根本不会调整文本大小,因此只显示一个大字母(注意:我正在使用调整大小的大字体,因为我无法提前知道文本的大小,因为大小取决于屏幕大小)。 .lineBreakMode 的任何其他值都会导致调整文本大小但拆分为“Shoote”和“r team”,这看起来很愚蠢。将 autoshrink 更改为例如Minimum font size = 8 似乎没有任何效果。请参见下面的屏幕截图。

关于如何获得正确的拆分/调整大小的任何建议?我可能在搜索中使用了错误的术语,但我没有找到任何答案 :-|

(注意:关于如何在显示 View 之前让包围 View 的边界成为一个漂亮的圆圈,会有一个不同的问题:-|)

Screenshot on iPhone 8+ simulator

最佳答案

首先,要利用 adjustsFontSizeToFitWidth,您还必须给它一个比例因子(您愿意让标签缩小到的最小尺寸)。因此,例如,如果您的标签字体大小为 30,您可以将其缩小到 24:

someLabel.font = UIFont(name: "someFont", size: 30)
someLabel.adjustsFontSizeToFitWidth = true
someLabel.minimumScaleFactor = (24/30)

其次,您可能需要考虑为您的标签使用属性标题以利用段落样式。段落样式让您可以使用断字规则:

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.hyphenationFactor = 1.0

let attributedTitle = NSAttributedString(string: "Shooter team", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red, NSAttributedString.Key.paragraphStyle: paragraphStyle])

someLabel.attributedText = attributedTitle

关于swift - UILabel 在单词中间拆分(或如何获得正确的自动换行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com