sizeThatFits:返回不同的值iOS 5和iOS 6

时间:2012-10-26 12:51:01

标签: ios ios5 ios6 uilabel

我在ImageView子类中的UILabel上调用sizeThatFits:,我将错误定位为sizeThatFits:。在iOS 5上,我得到3行,在iOS 6 1行。

CGSize labelSize = [mTitleLabel sizeThatFits: CGSizeMake(self.bounds.size.width, 30)];
CGFloat lines = ceil(labelSize.width/self.frame.size.width);

我尝试通过调用以下方法自己进行计算,但是我在两个版本上都得到7而不是3。

float lines = mTitleLabel.frame.size.height/mTitleLabel.font.lineHeight;
lines = ceilf(lines);

2 个答案:

答案 0 :(得分:2)

似乎sizeThatFits:在iOS5中被破坏,忽略了行数。

NSString * title = ...; CGSize sizeToFit = [title sizeWithFont:label.font constrainedToSize:label.frame.size lineBreakMode:label.lineBreakMode];

答案 1 :(得分:-1)

你不应该打电话给sizeThatFits:。您应该调用sizeToFit以使视图大小本身达到合适的大小。 sizeToFit的实施最终会调用sizeThatFits:。要使标签换行到一定宽度,您可以执行以下操作:

UILabel *lbl = // create label
lbl.text = // some text
lbl.numberOfLines = 0; // required so it wraps to multiple lines
lbl.lineBreakMode = NSLineBreakByWordWrapping; // or some other desired wrapping

CGRect frame = CGRectMake(someX, someY, desiredWidth, 9999); // oversized height
lbl.frame = frame;
[lbl sizeToFit];  // The lbl will have desired x, y, and width. 
                  // The height fits the wrapping

现在获取您可以执行的实际行数:

frame = lbl.frame;
int lines = ceil(frame.size.height / lbl.font.lineHeight);