Ash*_*oat 4 iphone cocoa-touch objective-c uitextview
我正在使用该方法[string sizeWithFont:constrainedToSize:lineBreakMode:]来估计textView我正在调整大小的高度.但是,它似乎始终返回不正确的大小.为了调试,我编写了以下代码:
self.textView.font = [UIFont systemFontOfSize:14.0]; // It was this before, anyways
NSLog(@"Real width: %lf %lf", self.textView.contentSize.width, self.textView.frame.size.width);
NSLog(@"Real height: %lf", self.textView.contentSize.height);
NSLog(@"Estimated width: %lf", kOTMessageCellTextWidth);
NSLog(@"Estimated height: %lf", ([message.message sizeWithFont:[UIFont systemFontOfSize:14.0]
constrainedToSize:CGSizeMake(kOTMessageCellTextWidth, CGFLOAT_MAX)
lineBreakMode:UILineBreakModeWordWrap].height));
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码显示我得到了不一致的结果:
实际宽度:223.000000 223.000000
实际高度:52.000000
预计宽度:223.000000
预计高度:36.000000
实际宽度:223.000000 223.000000
实际高度:142.000000
估计宽度:223.000000
估计高度:126.000000
实际宽度:223.000000 223.000000
实际高度:142.000000
估计宽度:223.000000
估计高度: 126.000000
我在这个类似的问题中注意到(显然)textView有一些填充限制了它的实际宽度.那里的建议是减少了传递给sizeWithFont:某个数字的宽度.建议的数字是11.
我的问题:有没有办法以编程方式实际检索这个值,或者是否有一些我错过了指定这个数字的文档?似乎这个数字应该是可用的,不应该被猜测和检查,但我找不到可靠的方法来识别它.
提前致谢.
好的,经过一些(重新)搜索,我就来了.
UITextView每侧有8px的填充.但是UILabel(和sizeWithFont方法的结果)的行高也不一样
在我的情况下,字体是Arial,大小是16pt,textview的行高比uilabel的行高高4.5个点.所以;
代码(不是确切的代码):
CGSize constraintSize = CGSizeMake(250.0 - 16.0, MAXFLOAT);
CGSize labelSize = [message.text sizeWithFont:[UIFont fontWithName:@"Arial" size:16.0] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
CGFloat lineCount = labelSize.height / [UIFont fontWithName:@"Arial" size:16.0].lineHeight;
CGFloat additional = lineCount * 4.5; // for 16.0 pt Arial for now
return labelSize.height + additional + 16.0; // TextView fix
Run Code Online (Sandbox Code Playgroud)
我仍然有一些问题,不喜欢我解决它的方式.但这个问题似乎还可以.如果有人为此提供合理的解决方案,那将会很棒.