如何将String放入矩形?

时间:2009-08-24 16:51:46

标签: iphone objective-c cocoa-touch uikit

我有一个NSString并希望将其装入矩形。矩形具有指定的大小,例如width = 150和height = 30。当String很短并且只有一个字符时,它可以和矩形一样高。更具体:它可以有一个很大的字体大小。但是如果字符串有太多字符并且超出矩形的边界,它必须变小。更具体:它的字体大小必须变小,以便它不会超过矩形的边界。有没有办法做到这一点而不搞乱核心图形?

出于某种原因,UILabel的adjustsFontSizeToFitWidth属性无效。即使有足够的空间,文本仍然很小。

我已将其设置为

label.adjustsFontSizeToFitWidth = YES;

但没有任何反应。我希望还有另一种方法可以做到这一点......

3 个答案:

答案 0 :(得分:6)

UILabel有几个部分可以实现这一点,但首先您必须知道是否要截断字符串或​​使字体更小以适应矩形。

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

  • 截断:将frame属性设置为UILabellineBreakModeUILineBreakModeClipUILineBreakModeHeadTruncation,具体取决于截断行为您正在寻找。
  • 调整大小:根据您的偏好,将UILineBreakModeTailTruncation设置为UILineBreakModeMiddleTruncation或“UILineBreakModeCharacterWrap”。然后你需要输入一个循环来确定正确的字体大小。从合理的字体大小开始(例如,12)和:
    • lineBreakMode的{​​{1}}属性设置为与UILineBreakModeWordWrap匹配的font
    • 致电UILabel了解UIFont
    • 检查- (void) sizeToFit的{​​{1}}:
      • 如果框架符合你需要的界限,你就完成了
      • 如果框架仍然很大,请删除字体大小并重复循环

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

  1. 将标签字体大小设置为所需的正常大小。
  2. 将标签最小字体大小设置为 尽可能小的字体 (minimumFontSize财产)
  3. adjustsFontSizeToFitWidth设为 YES
  4. 如果您需要多行,请将lineCount设置为0,如另一张海报所示。