我尝试更新依赖于其中文本的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
的子类中的子类中。
答案 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;
}