sizeToFit功能异常



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

我遇到的问题是,一切工作正常时,视图第一次重新加载。但是,当我在屏幕上并且后台发生变化时,偶尔会在多行上显示状态消息。虽然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];

为了确定你的标签需要的大小,你需要查看NSString size方法。有很多可以告诉你字符串的大小一个字体,和各种约束。

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

作为题外话,我发现UILabel不能很好地处理多行字符串。你最好编写你自己的UIView子视图,它可以处理多行文本,每一行都有自己的标签。

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

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

最新更新