在 iOS7 应用程序的单个屏幕中显示大量格式化文本的最佳方式是啥?

Posted

技术标签:

【中文标题】在 iOS7 应用程序的单个屏幕中显示大量格式化文本的最佳方式是啥?【英文标题】:What is the best way to display a large amount of formatted text in a single screen in an iOS7 app?在 iOS7 应用程序的单个屏幕中显示大量格式化文本的最佳方式是什么? 【发布时间】:2014-04-16 17:06:50 【问题描述】:

我正在制作一个应用程序,我想添加一个条款和条件页面,所以我想在单个屏幕上拥有一个大的可滚动文本窗口。我看过的两个类是 UIScrollView 和 UITextView。 UIScrollView 很容易滚动,但我不确定如何添加我需要的所有格式化文本,而无需手动创建每个标签、对其进行格式化并将其添加到正确位置的视图中。我创建了一个带有属性文本的 UITextView(不可编辑,不可选择),这给了我我需要的东西,但是我无法让它滚动到窗口的边界之外(即我无法滚动到底部之外屏幕边框,即使我更改了它的内容大小并将其框架更改为比屏幕本身大得多)。我还尝试了两者的合并,类似这样(在文本视图上禁用滚动之后):

_scrollView.scrollEnabled = YES;
_scrollView.contentSize = CGSizeMake(320, 2000);
[_textView removeFromSuperview];
[_scrollView addSubview:_textView];

但随后文本视图从未出现在滚动视图中。我确信这是其他人遇到的问题,因为许多应用程序的页面与我所描述的页面相似。我希望有人可以帮助我找到一种方法来做到这一点,而无需使用 UIScrollView 并为我要添加的每条文本手动创建标签。

【问题讨论】:

更多的是个人喜好。我一直单独使用 UITextView,它有一个内置的滚动条。 "我无法滚动到屏幕的底部边框之外" 我什至不知道这是什么意思。 UITextView 滚动,以便用户可以看到所有文本。有什么问题? @matt 这就是我的想法,但是当我点击屏幕底部时它只是停止滚动,这基本上是立即的。文字很清楚地远远超出了这里,但滚动条是整个屏幕的大小,不会让我走得更远。 就好像UITextView认为里面的文字只有屏幕的大小,其实大得多。 你不应该弄乱文本视图的内容大小,或者把它放在滚动视图中,或者任何东西。只需使用文本视图。确保它是可滚动的(这是 IB 或代码中的设置)。这就是你所需要的。如果不是, UITextView 将毫无用处!你不可能相信。 【参考方案1】:

UITextView 继承自 UIScrollView。您不需要在 UIScrollView 中包含 UITextView,除非您想在其中添加多个视图。

您可以像这样在UIViewController 中创建一个占据整个屏幕的 UITextView:

UITextView *myTextView = [[UITextView alloc] initWithFrame:self.view.bounds];
myTextView.text = @"some large text";
myTextView.font = [UIFont fontWithName:@"Arial" size:20];
myTextView.scrollEnabled = YES;
myTextView.editable = NO;
[self.view addSubview:myTextView];

属性contentSize 将根据文本大小自动设置。您还可以使用[myTextView sizeToFit] 方法调整UITextView 的大小以适合其文本。

【讨论】:

【参考方案2】:

还有第三种方法,那就是使用内部 htmlpage / 文件加载 UIWebview。

关于您的 UITextview - 设置框架大小,使其适合 screen/self.view 的范围,如果框架大小大于 screen/view.frame,那么您会遇到无法滚动等问题 - 这是因为就文本视图而言,整个文本已经显示,只是它显示在视图不可见的框架部分中。 UITextview 的行为类似于自动设置内容大小的滚动视图,因此您的所有文本都应该通过滚动可见。

关于 UIScrollviews - 类似于关于 UITextview 的讨论,您应该在 screen/self.view 的范围内设置帧大小。内容大小应该足够大以容纳您最大的对象(帧明智)。您将大于框架的 UITextview 放置在 UIScrollview 内的想法是合理的并且应该可行。只需将 textview 添加为滚动视图的子视图。

【讨论】:

以上是关于在 iOS7 应用程序的单个屏幕中显示大量格式化文本的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 - 无法在滚动视图中嵌入屏幕

iOS7如何以编程方式为iPhone多任务屏幕显示黑屏? [复制]

为啥在 iOS 7 中我的本地通知没有显示横幅

iOS 7 模拟器显示屏幕但不显示手机

Ruby/Rails - 正确显示/格式化文本区域表单控件中的文本

ios6&ios7 4寸屏和3.5寸屏如何显示UIButton和UITableview