sizeToFit运作奇怪

时间:2011-12-19 03:42:18

标签: iphone objective-c ios uilabel

每次发生后端数据库更改时,我都会执行一段代码。基本上我在父视图中有一个标签。标签由许多状态消息中的一个更新,每个状态消息在不同的行上以新行(\ n)结束。每条状态消息只需要在一行上,而不是重复。

我遇到的问题是,当View首次重新加载时,一切正常。但是,当我在屏幕上并且在后台发生更改时,偶尔会在多行上显示状态消息。虽然sizeToFit可以很好地使标签与包含父视图的标签一样高,但它在宽度方面做得很差。也就是说它会在多行上分解文本而不是仅查看换行符。

我该怎么办?

self.messageLabel.text = message; //lets get the status message.
        [self.messageLabel sizeToFit];
        [self.messageLabel setNeedsDisplay];
        CGRect frame = [self.messageView frame];
        frame.size.height = self.messageLabel.bounds.size.height;
        self.messageView.frame = frame;
        self.messageLabel.center = CGPointMake(CGRectGetMidX(self.messageView.bounds), CGRectGetMidY(self.messageView.bounds)-(self.messageView.cornerRadius/4));
        self.messageLabel.backgroundColor = [UIColor orangeColor];
        [self.messageView setNeedsDisplay];

2 个答案:

答案 0 :(得分:1)

为了确定标签所需的大小,您需要查看NSString大小方法。有一些可以告诉你一个字符串将被赋予字体的大小,以及各种约束。

例如,[@"string" sizeWithFont: forWidth: lineBreakMode:];会返回CGSize,然后您可以使用它来适当调整标签大小。

顺便说一句,我发现UILabel不能很好地处理多行的字符串。您可能最好编写自己的UIView子视图,它可以处理多行文本,每行都有自己的标签。

答案 1 :(得分:1)

每次在初始操作后调整帧大小时,似乎都会发生这种情况。据推测,在-sizeToFit中确定新尺寸时,会使用框架的当前尺寸。 我正在使用的解决方法是在每次调用sizeToFit之前将视图的框架设置为预定义的大小,例如:

myLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.width.height);
[myLabel sizeToFit];