以有限的行数滚动 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 中的内容的主要内容,如果未能解决你的问题,请参考以下文章