4

我知道有一些类似的帖子,但它们似乎对我不起作用。

我有一个 uitextview,我希望它的行为类似于消息传递应用程序。

我使用了自动布局和 [textview setScrollEnabled:NO] 来允许 uitextview 在键盘上方动态展开。当然,它会一直增长到屏幕顶部。当它停止增长时,您将看不到任何其他文本。

我试图找到它在 textViewDidChange 内停止增长并调用 [textView setScrollEnabled:YES] 的高度,但它在增长之前缩小了初始大小。

当滚动达到一定高度或不再增长时,如何启用滚动?

4

4 回答 4

8

到目前为止,我发现的最佳解决方案是启用滚动并根据其内容大小更改 textview 的高度。

看起来像这样:

- (void)textViewDidChange:(UITextView *)textView
{
    self.consTextViewHeight.constant = MIN(MAX_HEIGHT, textView.contentSize.height + textView.textContainerInset.top);
}
于 2015-05-13T15:23:22.627 回答
1

您是否尝试为 textView 设置内容大小?如果您想等待自动布局完成,您可以在 viewDidLayoutSubviews 中执行此操作。

这是有用的链接:当用户开始滚动或点击 textview 时,如何立即设置 textView 的 Scrollview 的内容大小

注意:这应该是一个评论,但我没有足够的声誉......

于 2014-12-03T13:07:24.860 回答
0

当文本视图到达屏幕顶部所需的距离时,向文本视图添加高度约束。我是这样弄的

-(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 点以内时,它会获得一个等于其当前高度的高度约束。

于 2014-12-03T17:09:23.013 回答
0

这是一项研究,这里是你的线索。

  1. 子类化您的文本视图。

  2. 监控 contentSize 的变化,可能有一个你可以覆盖的 setter 或者只是 KVO 可以工作。

  3. 创建文本视图委托,它将 ping 您的控制器以更新自动布局约束。

  4. 当 contentSize 达到您定义的最大值时,只需钳制该值并让文本视图自然滚动。

于 2014-12-03T13:47:05.603 回答