以有限的行数滚动 UITextView 中的内容

Posted

技术标签:

【中文标题】以有限的行数滚动 UITextView 中的内容【英文标题】:Scroll content in UITextView with limited lines count 【发布时间】:2016-02-06 22:05:23 【问题描述】:

我无法将 UITextView 控件设置为按预期工作。 我有类似的东西:

[textView.textContainer setMaximumNumberOfLines:3];
[tv.textContainer setLineBreakMode:NSLineBreakByWordWrapping];
[textView setUserInteractionEnabled:YES];
[textView setScrollEnabled:YES];

我的预期结果是具有默认 1 行高的可编辑文本视图。当我输入文本时,控件最多扩展为 3 行,之后我仍然可以写,但是内容可以在 3 行控件中滚动。

不幸的是,基于上面的代码,我无法得到这个结果。当我的控件有 3 行高度,并且我放置了更多文本时,我的光标消失了,我仍然可以书写,但无法滚动输入的内容。

您对如何实现 UITextViewController 的预期行为有任何建议或提示吗?

【问题讨论】:

如何设置 textView 的框架(例如代码中的界面生成器或自动布局约束...)? textView 的大小将决定滚动开始的时间......如果您所做的只是将行数限制为 3...... textView 可能仍然很大。尝试将 textView 的背景颜色设置为红色(或其他)以了解我的意思... 【参考方案1】:

根据我的评论,下面是一个示例,说明如何控制UITextView 可以使用多少“空间”以及如何设置滚动以匹配:

UITextView* _textView = [UITextView new];
// other setup...
_textView.textContainerInset = UIEdgeInsetsMake(60, 5, 8, 5);
_textView.scrollIndicatorInsets = UIEdgeInsetsMake(52, 0, 0, 0);

在这个例子中,我让_textView 占据了它的所有父视图(使用自动布局约束,相当于整个屏幕)。例如

NSArray* constraints;
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_textView]|" options:0 metrics:nil views:views];
[self.view addConstraints:constraints];

constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_textView]" options:0 metrics:nil views:views];
[self.view addConstraints:constraints];

我还在屏幕顶部有一个自定义工具栏,其高度为52。 (自定义工具栏,不是股票UINavigationBar)。

因此,在这种情况下,我使用 textContainerInset 属性来限制将用于显示文本的文本视图部分:上边距最相关,我想从工具栏,然后有一些额外的 margin (8)。

此外,我使用scrollIndicatorInsets 使滚动指示器从顶部停止52 单位(工具栏的大小)。

我不知道您的 textView 与您视图中的其他控件的匹配度如何...但是,要控制用于文本的空间量以及滚动如何与之一起工作,您需要做更多的事情比:

[textView.textContainer setMaximumNumberOfLines:3];

这有帮助吗?

【讨论】:

嗨,加文。感谢您的广泛解释。更准确地说,我尝试在cocoadocs.org/docsets/JSQMessagesViewController/6.0.0/… 中的输入字段中实现预期结果默认情况下,此输入文本视图(新消息)是可扩展的,没有任何限制。在我的代码中我可以访问它,所以我尝试设置我的限制并向这个输入栏添加滚动功能。 只是为了检查一下,您使用inputAccessoryView property 作为具有UITextView 用于输入文本的视图? 不管你是怎么做的...只要尝试限制文本视图的高度,使它不能增长到比适合 3 行文本的值“高”...然后滚动将开始。您不需要设置最大行数...

以上是关于以有限的行数滚动 UITextView 中的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何使 uitextview 不可滚动但显示所有内容

UITextView iOS 7的行数

Toggle 在最大行数后启用 UITextView 滚动

如何使节标题中的 UITextView 将其高度调整为其内容

30 天滚动窗口中的行数

JTextArea中开启了自动换行怎么得到文本框中的行数