UITextView contentSize 自动减小
Posted
技术标签:
【中文标题】UITextView contentSize 自动减小【英文标题】:UITextView contentSize automatically decreases 【发布时间】:2013-10-09 11:26:18 【问题描述】:我有一个UITextView
,我试图随着行数的增加调整其高度。除此之外,我需要调整包含UITextView
的UIView
的大小。我为此使用以下代码:
-(void) textViewDidChange:(UITextView *)textView
CGFloat before = textView.frame.size.height; CGRect frame = textView.frame; frame.size = textView.contentSize; CGFloat after = frame.size.height, diff = after - before, final = 0; if (diff>16) final = 8; else if(diff<-1) final = -16; else final = 0; [self.containerView setFrame: CGRectMake(self.containerView.frame.origin.x,
self.containerView.frame.origin.y-final, self.containerView.frame.size.width, frame.size.height+13)];
[textView setFrame: frame];
我还尝试在更改文本时更改容器的 Y 位置。我根据字体大小使用静态数值以避免复杂化。
但问题是,每当UITextView
进入新行时,它会将contentSize
的大小调整为原始大小,因此UITextView
的框架也缩小了一会儿,看起来真的很难看。此外,Y 位置取决于此 contentSize
更改,并且在发生此自动调整大小时它会变得一团糟。
我正在寻找与 whatsapp 或 viber 等应用相同的行为。知道如何实现这一目标吗?
【问题讨论】:
【参考方案1】:如果我理解正确,containerView 包含一个文本字段并且必须围绕它绘制,而不管文本字段的大小如何?如果是这样,请尝试这样的事情
-(void) textViewDidChange:(UITextView *)textView
CGRect frame = textView.frame;
frame.size = textView.contentSize;
//do your magic calculations
[textView setFrame: frame];
[self.containerView setFrame: CGRectMake(self.containerView.frame.origin.x,
self.containerView.frame.origin.y-final, self.containerView.frame.size.width, frame.size.origin.y +frame.size.height+13)];
【讨论】:
好像没有这种方法。以上是关于UITextView contentSize 自动减小的主要内容,如果未能解决你的问题,请参考以下文章
在 UITextView 上使用 NSLayoutConstraint 会将 contentSize 重置为 0,0
iOS7 UITextView contentsize.height替代方案
根据 UITableViewCell 内的 contentSize 设置 UITextView 高度仅在初始表加载后有效
UITextView contentSize.height 比必要的大吗?