UITextView 在滚动之前不会显示
Posted
技术标签:
【中文标题】UITextView 在滚动之前不会显示【英文标题】:UITextView doesn't show until it is scrolled 【发布时间】:2011-10-12 10:30:14 【问题描述】:我正在使用UITextView
显示来自xml
的文本。我解析了xml 并将文本存储在NSArray
中,然后我将其添加到我的代码中的UITextview
。
问题: 当我运行代码时,textview 显示为空或带有部分文本,当我尝试滚动 textview 时,将显示整个文本。
我将UITextview
添加到UIView
。
我发现它很奇怪并用谷歌搜索,但找不到很多对我有帮助的答案。 有人可以回复我解决问题吗
TNQ
【问题讨论】:
你有没有检查过你的 UItextView 有你期望的框架(你可以设置它的背景颜色来进行快速的视觉检查) 我也遇到过这个问题。我使用这个解决方案解决了这个问题。 [1]:***.com/a/11147954/1635315 这对我也有帮助..谢谢.. 【参考方案1】:找到一个简单的解决方案
遇到了同样的问题。当您将文本放入不可见的 UITextView 时,它不会绘制文本。
我的 UITextView 关闭屏幕并像这样设置动画:
[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationCurveEaseOut animations:^
self.contentView.center = CGPointMake(self.contentView.center.x + move * (self.contentView.frame.size.width /2), self.contentView.center.y);
self.textView.frame = self.textView.frame; // <<<--- ADD THIS LINE
completion:^(BOOL finished)
if (finished)
];
当您重新设置 textview 的框架时,它会重新绘制它的文本。因此,您需要做的就是在 UITextView 出现在屏幕之前添加我在上面标记的行。
干杯
【讨论】:
+1 不得不这样做真是太糟糕了,但这绝对解决了我的问题。 在我的情况下,我需要先将其设置为 CGRectZero,然后再恢复它。男人!【参考方案2】:UITextView 继承自 UIScrollView,所以只需滚动即可。
[detailsTextView setContentOffset:CGPointMake(0, 1) animated:YES];
【讨论】:
感谢您节省大量时间【参考方案3】:我通过清除 textview 并再次将文本添加到 textview 解决了这个问题,我不知道确切的基础,但我的问题已经解决。 就我而言: 我正在将 textview 的框架从外部更改为单击按钮时的视图。单击按钮时,textview 不显示内容并在滚动时显示。
我解决了,通过从 textview 中删除文本并在单击按钮时重新输入文本。
【讨论】:
我现在看到了同样的问题。我从 UITextView 关闭屏幕开始,然后按下按钮将其滑入。我用文本(超过 10 行)加载了 textview,但在用户触摸 textview 之前它不会显示。这看起来像一个 ios 错误,或奇怪的“功能”。进行上述修复只会使第一行可见...... duh。【参考方案4】:UItextView
继承自 UIScrollView
。这意味着它具有滚动功能。因此,如果UITextView
的内容足够小以适合其框架,则不需要滚动。
但是,如果它足够大,您需要滚动UITextView
。
这有意义吗?
更多信息请参考UITextView的类参考
【讨论】:
这是真的,但我的情况是 uitextView 在滚动之前没有显示任何数据。至少它应该在滚动之前适合 textview 的数据量。不是吗?【参考方案5】:确保正确调用您设置 textview 文本的方法。您分配给文本视图的字符串采用正确的字符串格式(如果不是,请保留它)。
【讨论】:
【参考方案6】:空格和/或换行符有可能出现在实际文本之前。在将其分配给文本视图之前修剪这些字符。
NSCharacterSet *charset = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *text = [parsedString stringByTrimmingCharactersInSet:charset];
textview.text = text;
【讨论】:
【参考方案7】:请在你的 textView 加载时尝试一下
NSAttributedString *oldtext = objTextView.attributedText;
[objTextView removeFromSuperview];
objTextView.attributedText = oldtext;
[self.view addSubview:objTextView];
在我的例子中,我的文本是属性
【讨论】:
【参考方案8】:当您完成解析 XML 的操作时,您是否确保您的更新发生在主线程上?
UIKit 仅在主线程上更新,因此任何对其进行的更新只会在您下次触摸对象并强制更新时显示。
作为正确执行此操作的一种方法的示例。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^
[self parseXMLOffMainThread];
dispatch_async(dispatch_get_main_queue(), ^
self.myTextView.text = parsedText;
);
);
【讨论】:
以上是关于UITextView 在滚动之前不会显示的主要内容,如果未能解决你的问题,请参考以下文章
iOS6 和 UITableView 中的屏幕外 UITextView
如果在之前在 UITextField 上键入之前未“加载”,则 UITableViewCell 中的 UITextView 不会显示
调整表格视图单元格以显示 UITextView 和 UIWebView