1

在我的awakeFromNib职能中,我有:

[_descriptionLabel setLineBreakMode:UILineBreakModeWordWrap];
[_descriptionLabel setNumberOfLines:10];
[_descriptionLabel sizeToFit];

然而我的标签看起来像这样:

UIL标签

我知道我将这些调用设置在正确的标签上,因为没有这些行,文本会显示为垂直居中而不是在顶部对齐。我怎样才能使我的UILabel多线?

我也试过了setNumberOfLines:0

解决方案我在 xib 文件中错误地设置了宽度。

4

4 回答 4

1
  1. 尝试将[_descriptionLabel setNumberOfLines:0];which set 的行数设置为自动。
  2. 可能是sizeToFit正在更改您的标签宽度,尝试将其设置为显式宽度,或将其删除。
于 2013-07-06T20:57:59.210 回答
0

如果您不使用 AutoLayout,则需要在代码中测量文本:

CGRect frame = _descriptionLabel.frame;
CGSize size = [_descriptionLabel.text sizeWithFont:_descriptionLabel.font constrainedToSize:CGSizeMake(frame.size.width, FLOAT_MAX) lineBreakMode:_descriptionLabel.lineBreakMode];
frame.size.height = MIN(MAX(size.height, frame.size.height), MAX_ALLOWED_HEIGHT);
_descriptionLabel.frame = frame;
于 2013-07-06T20:58:04.163 回答
0

只要确保初始宽度设置正确。然后它应该扩大/缩小高度。但是标签仍然不会与顶部对齐,它会在调用后以之前的大小居中sizeToFit(如果新的高度比以前小,否则原点将保持不变)。

于 2013-07-06T21:12:56.190 回答
0

你确定你awakeFromNib是在正确的地方。如果它在视图控制器中,它将不起作用。如果它在自定义标签的实现中,它应该被调用并且该代码应该可以工作:

@interface TestLabel : UILabel
@end

@implementation TestLabel

- (void)awakeFromNib
{
    [self setLineBreakMode:UILineBreakModeWordWrap];
    [self setNumberOfLines:10];
    [self sizeToFit];
    NSLog(@"Label: %@", NSStringFromCGRect(self.frame));
}

@end

numberOfLines此外,设置为更容易0,这意味着“任意数量的行”。而且您不需要设置UILineBreakModeWordWrap,因为这是默认设置。

如果您想将代码保留在视图控制器中,可以将其移动到viewDidLoad,这是进行此类设置的最佳位置。

于 2013-07-06T21:45:08.743 回答