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 在滚动之前不会显示的主要内容,如果未能解决你的问题,请参考以下文章

显示键盘时 UITextView 不会滚动

iOS6 和 UITableView 中的屏幕外 UITextView

如果在之前在 UITextField 上键入之前未“加载”,则 UITableViewCell 中的 UITextView 不会显示

调整表格视图单元格以显示 UITextView 和 UIWebView

在 iOS 7 上成为第一响应者后,UITextView 不会滚动到插入符号

在 uiScrollView 之前添加 uiTextView