iPad/iPhone - 设置适合给定矩形的标签尺寸

发布于 2024-10-13 15:43:12 字数 1184 浏览 2 评论 0原文

在我的 iPad 应用程序中,我有一个占据整个视图的标签。我想动态计算适合整个矩形的标签的大小。但我想保持自动换行。 在我的 XIB 中,我添加了一个标签并将其模式设置为自动换行模式。

请参阅所附图片。我想要的是用自动换行显示标签。有人可以帮我找出问题所在吗?

以下是我正在使用的代码: (在这些论坛的答案之一中,我找到了以下代码:)

-(void)sizeLabel:(UILabel*)label toRect:(CGRect)labelRect withFont:(NSString*)fontName {

    // Set the frame of the label to the targeted rectangle
    label.frame = labelRect;

    // Try all font sizes from largest to smallest font size
    int fontSize = 300;
    int minFontSize = 5;

    // Fit label width wize
    CGSize constraintSize = CGSizeMake(label.frame.size.width, MAXFLOAT);

    do {
  // Set current font size
  label.font = [UIFont fontWithName:fontName size:fontSize];

  // Find label size for current font size
  CGSize labelSize = [[label text] sizeWithFont:label.font
      constrainedToSize:constraintSize
      lineBreakMode:UILineBreakModeWordWrap];

  // Done, if created label is within target size
  if( labelSize.height <= label.frame.size.height )
   break;

  // Decrease the font size and try again
  fontSize -= 2;

    } while (fontSize > minFontSize);
}

alt text

In my ipad application, i've a lable that occupies whole view. I want to dynamically calculate the size of the label that fits in the whole rect. But I want to maintain the word wrap.
In my XIB, I added a label and set it mode to word wrap mode.

See the image attached. What I want is to show the label with word wrap. Can some one help me to find the problem?

The following is the code that I'm using:
(In one of the answers in these forums, I found the following code:)

-(void)sizeLabel:(UILabel*)label toRect:(CGRect)labelRect withFont:(NSString*)fontName {

    // Set the frame of the label to the targeted rectangle
    label.frame = labelRect;

    // Try all font sizes from largest to smallest font size
    int fontSize = 300;
    int minFontSize = 5;

    // Fit label width wize
    CGSize constraintSize = CGSizeMake(label.frame.size.width, MAXFLOAT);

    do {
  // Set current font size
  label.font = [UIFont fontWithName:fontName size:fontSize];

  // Find label size for current font size
  CGSize labelSize = [[label text] sizeWithFont:label.font
      constrainedToSize:constraintSize
      lineBreakMode:UILineBreakModeWordWrap];

  // Done, if created label is within target size
  if( labelSize.height <= label.frame.size.height )
   break;

  // Decrease the font size and try again
  fontSize -= 2;

    } while (fontSize > minFontSize);
}

alt text

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

回首观望 2024-10-20 15:43:12

所以你试图让文本自动换行,但使用最大可能的大小?
在这种情况下,请执行以下操作:

//With the line break mode set to wordwrap and number of lines set to 1.
[label adjustsFontSizeToFitWidth:YES];
//set max font
label.font = [UIFont fontWithName:fontName 300];
[label setMinimumFontSize:5];

这应该就是您需要做的全部事情。

So you trying to get the text to be wordwrapped, but with the maximum possible size?
In that case do:

//With the line break mode set to wordwrap and number of lines set to 1.
[label adjustsFontSizeToFitWidth:YES];
//set max font
label.font = [UIFont fontWithName:fontName 300];
[label setMinimumFontSize:5];

And that should be all you need to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文