我在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);
答案 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);