【问题标题】:How to fit a String into a rectangle?如何将字符串放入矩形?
【发布时间】:2009-08-24 16:51:45
【问题描述】:

我有一个 NSString 并且想将它放入一个矩形中。矩形具有指定的大小,可以说宽度=150 和高度=30。当字符串很短且只有一个字符时,它可以和矩形一样高。更具体地说:它可以有很大的字体大小。但是如果字符串有太多字符并且会超出矩形的边界,它必须变得更小。更具体地说:它的字体大小必须变小,这样它就不会超出矩形的边界。有没有一种方法可以做到这一点而不会弄乱核心图形?

由于某种原因,UILabel 的 adjustsFontSizeToFitWidth 属性不起作用。即使有足够的空间,文本仍然很小。

我已经设置为

label.adjustsFontSizeToFitWidth = YES;

但什么也没发生。我希望有另一种方法可以做到这一点......

【问题讨论】:

  • 较小是什么意思?你的意思是截断字符串吗?
  • 较小的字体大小/不截断。更详细地更新了问题

标签: iphone objective-c cocoa-touch uikit


【解决方案1】:

UILabel 有几个部分使这成为可能,但首先您必须知道是否要截断字符串或​​缩小字体大小以适应矩形。

对于这两种情况,您都需要将UILabelnumberOfLines 属性设置为0,允许标签尽可能多地换行。然后,您需要设置 UILabelframe 以匹配您要适合的矩形。从那里您可以选择以下两条路径之一:

  • 截断:将lineBreakMode 属性设置为UILineBreakModeClipUILineBreakModeHeadTruncationUILineBreakModeTailTruncationUILineBreakModeMiddleTruncation,具体取决于您要查找的截断行为。
  • 调整大小:根据您的喜好将lineBreakMode 设置为UILineBreakModeWordWrap 或`UILineBreakModeCharacterWrap'。然后你需要输入一个循环来确定正确的字体大小。从合理的字体大小(例如 12)开始,然后:
    • UILabelfont 属性设置为与该大小匹配的UIFont
    • 请致电- (void) sizeToFit 获取UILabel
    • 检查frame 中的UILabel
      • 如果框架适合您需要的范围,您就完成了
      • 如果框架仍然太大,请降低字体大小并重复循环

对于后一个选项,您需要确保不会将文本挤压到遗忘,因此您需要为字体大小设置一个最小大小上限。

您可以从UILabelUIFont 文档中获取更多信息。

【讨论】:

    【解决方案2】:

    adjustsFontSizeToFitWidth 调整字体大小向下,而不是向上。

    将 UILabel 上的字体设置为适当的大尺寸,UILabel 会在必要时将其缩小以适应其边界。

    【讨论】:

      【解决方案3】:
      1. 将标签字体大小设置为所需的正常大小。
      2. 将标签最小字体大小设置为 最小可能的字体 (minimumFontSize 财产)
      3. adjustsFontSizeToFitWidth 设置为 YES

      如果您需要多行,请将 lineCount 设置为 0,如另一张海报所述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多