更新文本大小UITextView的高度

时间:2014-11-26 00:43:08

标签: ios objective-c cocoa-touch uitextview

我尝试更新依赖于其中文本的TextView。当用户输入更多文本时,我需要将高度增加到底部方向。可以放在一条线上。

我目前正在使用以下代码:

-(void)textViewDidChange:(UITextView *)textView{
    CGRect newFrame = self.frame;
    newFrame.size.height = [self textViewHeightForAttributedText:
                       [[NSMutableAttributedString alloc] initWithString:self.text]
                       andWidth:self.frame.size.width];

    [self setNeedsLayout];

}

- (CGFloat)textViewHeightForAttributedText: (NSAttributedString*)text andWidth: 
(CGFloat)width {
    UITextView *calculationView = [[UITextView alloc] init];
    [calculationView setAttributedText:text];
    CGSize size = [calculationView sizeThatFits:CGSizeMake(width, FLT_MAX)];
    return size.height;
}

但是,这并不是要更新UITextView的高度。我已设置UITextView的代理人。此代码编写在UITextView的子类中的子类中。

3 个答案:

答案 0 :(得分:0)

看起来你实际上并没有改变textView的高度,你只需要创建一个与textView相同尺寸的新框架,调整新框架的大小,然后不做任何操作。

尝试添加:

textView.frame = newFrame;

答案 1 :(得分:0)

您可以将名为HPGrowingTextView的Coco-control用于i OS。类似于Apple在SMS中使用的。

浏览此链接。https://www.cocoacontrols.com/controls/hpgrowingtextview

答案 2 :(得分:0)

- (void)textViewDidChange:(UITextView *)textView
{
    UIFont *myFont = [UIFont systemFontOfSize:14];
    CGSize size =   [self sizeOfText:textView.text widthOfTextView:TextviewWidth withFont:myFont];
    NSLog(@"Height : %f", size.height);
    txtView_Details.frame = CGRectMake(txtView_Details.frame.origin.x, txtView_Details.frame.origin.y, txtView_Details.frame.size.width, size.height);
}

-(CGSize)sizeOfText:(NSString *)textToMesure widthOfTextView:(CGFloat)width withFont:(UIFont*)font
{
    CGSize ts = [textToMesure sizeWithFont:font constrainedToSize:CGSizeMake(width-20.0, FLT_MAX) lineBreakMode:NSLineBreakByWordWrapping];
    return ts;
}