如何将String放入矩形?

1 iphone cocoa-touch objective-c uikit

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

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

我已经设定了

label.adjustsFontSizeToFitWidth = YES;
Run Code Online (Sandbox Code Playgroud)

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

fbr*_*eto 6

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

对于这两种情况,您都需要将UILabel's numberOfLines属性设置为0,允许标签尽可能多地换行.然后,你要设置frameUILabel匹配你正在寻找适合的矩形.从那里你可以选择两条路径之一:

  • 截断:将lineBreakMode财产UILineBreakModeClip,UILineBreakModeHeadTruncation,UILineBreakModeTailTruncation,或UILineBreakModeMiddleTruncation依赖于截断行为,你要寻找的.
  • 调整大小:根据您的偏好设置lineBreakModeUILineBreakModeWordWrap或者"UILineBreakModeCharacterWrap".然后你需要输入一个循环来确定正确的字体大小.从合理的字体大小开始(例如,12)和:
    • 设置font的属性UILabelUIFont该该尺寸相匹配
    • 打电话- (void) sizeToFitUILabel.
    • 检查frameUILabel:
      • 如果框架适合您需要的范围,那么您就完成了
      • 如果框架仍然很大,请删除字体大小并重复循环

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

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