无法动态更正uitextview高度

时间:2011-04-12 17:08:07

标签: iphone xcode uitextview

我在获取正确大小的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

6 个答案:

答案 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的估算WidthtextField :( 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