我知道有一些类似的帖子,但它们似乎不适用于我。
我有一个uitextview,它的行为类似于Messenger应用程序。
我使用了自动布局和[textview setScrollEnabled:NO]以允许uitextview在键盘上方动态扩展。当然,它会一直增长到到达屏幕顶部。当它停止增长时,您将看不到任何其他文本。
我试图找到在textViewDidChange内停止增长的高度,并称为[textView setScrollEnabled:YES],但在增长之前缩小了初始大小。
到达一定高度或无法再增长时如何启用滚动?
到目前为止,我发现的最佳解决方案是启用滚动功能,并根据其内容大小更改textview的高度。
看起来像这样:
- (void)textViewDidChange:(UITextView *)textView
{
self.consTextViewHeight.constant = MIN(MAX_HEIGHT, textView.contentSize.height + textView.textContainerInset.top);
}
您是否尝试为textView设置setContentSize?如果要等待自动布局完成,可以在viewDidLayoutSubviews中执行此操作。
注意:这应该是评论,但我对此没有足够的声誉...
这是一项研究,这里是您的线索。
将您的文本视图分类。
监视器contentSize发生变化,可能有一个可以重写的设置器,或者只是KVO可以工作。
创建文本视图委托,它将向后ping您的控制器以更新自动布局约束。
当contentSize达到您定义的最大值时,只需钳制该值并让文本视图自然滚动。
当文本视图距屏幕顶部达到所需距离时,向文本视图添加高度限制。我已经做到了,
-(void)textViewDidChange:(UITextView *)textView {
if (textView.scrollEnabled == NO) {
if (textView.frame.origin.y < 50) {
[textView addConstraint:[NSLayoutConstraint constraintWithItem:textView attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:textView.frame.size.height]];
textView.scrollEnabled = YES;
}
}
}
[当文本视图从视图顶部增长到50个点以内时,它得到的高度约束等于其当前高度。
rdelmar当高度再次小于50点时如何重置约束?