如何仅在 UITextView 上强制水平滚动

Posted

技术标签:

【中文标题】如何仅在 UITextView 上强制水平滚动【英文标题】:how to force horizontal scrolling only on UITextView 【发布时间】:2012-05-22 14:01:02 【问题描述】:

我有一个UITextViewcontentSize 属性设置为一个非常大的值1000UITextView 的宽度是 200,启用滚动,启用水平弹跳和禁用垂直弹跳但是这个@ 987654326@ 仍然在大文本上垂直滚动。 我怎样才能强制水平滚动呢?

附言the solution here 不起作用。

【问题讨论】:

【参考方案1】:

UITextView 是 UIScrollView 的子类。所以你可以使用 ScrollViewDelegate 方法来禁用它。

使用 -

- (void)scrollViewDidScroll:(id)aScrollView

    [aScrollView setContentOffset:CGPointMake([scrollView contentOffset].x, 0.0)];

【讨论】:

【参考方案2】:

我尝试了许多不同的方法来让水平滚动功能按预期工作,但这些方法都不适合我,所以我创建了一个 UIScrollView 并在滚动视图中添加了一个 UILabel 作为子视图,并设置了框架的标签的宽度根据其文本和文本字体动态,之后我将滚动视图的 contentSize 设置为等于标签的新框架宽度和高度。使用此方法,您将获得水平滚动的文本。

【讨论】:

【参考方案3】:

使用 JAHelia 的建议,这对我有用:

self.dishNameLabel.text = @"Here is some very longgggg text to test with";
float width = ceil([self.dishNameLabel.text sizeWithAttributes:@NSFontAttributeName: [UIFont fontWithName:@"WorkSans-SemiBold" size:15.0]].width);
self.dishNameLabel.frame = CGRectMake(self.dishNameLabel.frame.origin.x, self.dishNameLabel.frame.origin.y, width, self.dishNameLabel.frame.size.height);
self.dishNameScrollView.contentSize = CGSizeMake( width, self.dishNameScrollView.frame.size.height);

当然,您必须用各自的规范替换文本和字体

【讨论】:

以上是关于如何仅在 UITextView 上强制水平滚动的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITextView 高度仅在滚动时变为动态?

过滤后如何在剑道 ui 网格上显示水平滚动条?

UITextView 从底部开始

如何在 iOS 中制作单行水平滚动 TextView

如何仅在 CSS 中滚动表格(水平/宽度)

如何以编程方式更新 UITextView maximumNumberOfLines 并查看 UI 更新。