为文本大小更新高度 UITextView
Posted
技术标签:
【中文标题】为文本大小更新高度 UITextView【英文标题】:Update height UITextView for text size 【发布时间】:2014-11-26 00:43:07 【问题描述】:我正在尝试根据其中的文本更新 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
子类的子类中。
【问题讨论】:
【参考方案1】:看起来你实际上并没有改变 textView 的高度,你只是创建一个与 textView 尺寸相同的新框架,调整新框架的大小,然后什么都不做。
尝试添加:
textView.frame = newFrame;
【讨论】:
我明白了,我添加了该行,但不幸的是这没有帮助。即使我认为你是对的,所以我会留下那行:) 你能确定 textViewDidChange 被调用了吗?在其中弹出一个 NSLog 语句,并确保每次按下某个键时都能看到控制台消息。 是的,我确定,刚刚仔细检查过。 这个对象是什么类,即“自我”是什么。它是从 UITextView 继承的,并且您正在尝试更新此类的实例的 UITextView 吗?还是“自我”是一个视图控制器?在这种情况下,self.frame 是什么? self 是 UITextView。我会提到这是写在 UITextView 的子类中【参考方案2】:您可以使用名为 HPGrowingTextView for i OS 的 Coco-control。类似于 Apple 在 SMS 中使用的那个。
通过此链接。https://www.cocoacontrols.com/controls/hpgrowingtextview
【讨论】:
【参考方案3】:- (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;
【讨论】:
以上是关于为文本大小更新高度 UITextView的主要内容,如果未能解决你的问题,请参考以下文章
在ios中设置文本(大多数时候)后,UILabel不更新其高度