我在获取正确大小的uitextview时遇到了问题。在我的应用程序中,我从webservice获取数据,并根据webservice中的数据设置uitextview的高度。但是,只要前35个字母中有空格(框架)我的textview是(20,0,255,2000))。那么计算的hjeight总是比正确的高度少一行甚至uitext视图开始在新行中的空格后打印行(可能是单词很大就是为什么??)。
所以我得到了错误的文字视图高度。
文字视图像这样发出了somwethibng:
firstword spacesspacesspacesspaces spacesspacesspacesspaces spacesspacesspacesspaces spacesspacesspacesspaces spacesspacesspacesspaces
当我输入没有空格的文字时,它给出了正确的高度,假设数据是“tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttиtt”Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttиtt 然后在上面的场景中,Cgsize将为我生成适当的结果。
这里我没有使用UILabel是因为我想要链接检测这就是为什么。 如果有人有任何建议,我们非常欢迎。
此致 Mrugen
答案 0 :(得分:33)
使用NSString的sizeWithFont方法并不适用于文本视图。它适用于UILabel,但文本视图似乎在文本周围有额外的填充。如果你使用那种方法,你最终会得到一个有点短的大小。
UITextView是UIScrollView的子类。设置textview的text属性后,其contentSize属性会自动更新以适合文本。因此,如果要设置文本视图的高度以适合其文本,请执行以下操作:
textView.text = @"some text";
CGRect rect = textView.frame;
rect.size.height = textView.contentSize.height;
textView.frame = rect;
这将设置textView的高度,使其包含文本。
答案 1 :(得分:9)
您可以使用此功能测量文本的高度,并根据返回的高度设置框架。
-(CGSize)sizeOfText:(NSString *)textToMesure widthOfTextView:(CGFloat)width withFont:(UIFont*)font
{
CGSize ts = [textToMesure sizeWithFont:font constrainedToSize:CGSizeMake(width-20.0, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
return ts;
}
你可以这样使用它:
CGSize size = [self sizeOfText:@"the string you want to present" widthOfTextView:255 withFont:fontYouAreUsing];
然后将其传递给文本视图:
textView.frame = CGRectMake(20,0,255,size.height);
祝你好运
SHANI
答案 2 :(得分:1)
从iOS7开始,您现在应该使用:
CGRect textRect = [textToMesure boundingRectWithSize:CGSizeMake(width, FLT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:font}
context:nil];
CGSize size = textRect.size;
答案 3 :(得分:0)
你的问题的答案是 为UITextView创建一个实例,在我的例子中,我创建了txtView,然后在其中添加文本并在控制台中打印内容高度的高度。
NSLog(@“TextView高度为:%d”,txtView.contentSize.height)
答案 4 :(得分:0)
获取任何Height
的估算Width
和textField
:( Swift 4)
它将TextField的文本作为参数。
private func estimateFrameForText(text: String) -> CGRect {
let size = CGSize(width: 200.0, height: 1000)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
return NSString(string: text).boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 17.0)], context: nil)
}
答案 5 :(得分:0)
在Swift 4中尝试过
textView.intrinsicContentSize.height