问题 UITextView在滚动之前不会显示


我正在使用 UITextView 显示来自的文本 xml。我解析了xml并将文本存储在一个 NSArray 从那里我将它添加到一个 UITextview 在我的代码中。

问题: 当我运行代码时,textview显示为空或部分文本,当我尝试滚动textview时,整个文本显示。

我加了 UITextview 到了 UIView

我发现它很奇怪,谷歌搜索它,但找不到很多帮助我的答案。 有人可以回复我解决问题

TNQ


10174
2017-10-12 10:30


起源

您是否检查过您的UItextView具有您期望的框架(您可以设置其背景颜色以进行快速目视检查) - jbat100
我确保。 - Dinakar
我也遇到过这个问题。我使用此解决方案解决了此问题。 [1]: stackoverflow.com/a/11147954/1635315 - iKT
这对我有帮助。谢谢...... - Shivaay


答案:


找到了简单的解决方案

有同样的问题。当您将文本放入不可见的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进入屏幕之前添加我在上面标记的行。

干杯


10
2018-01-05 14:11



+1完全糟透了这一点,但这肯定解决了我的问题。 - Joseph DeCarlo
在我的情况下,我需要先将其设置为CGRectZero,然后恢复它。人! - Qiulang
可能不酷但工作 - micromanc3r


UITextView继承自UIScrollView,因此只需滚动它。

[detailsTextView setContentOffset:CGPointMake(0, 1) animated:YES];

5
2018-01-30 02:46



谢谢你节省了很多时间 - Lukas


我通过清除textview并将文本再次添加到textview解决了这个问题,我不知道确切的基础,但我的问题已经解决了。 在我的情况下: 我点击按钮时将textview的框架从外部更改为视图。单击按钮时textview不显示内容,滚动显示内容。

通过从textview中删除文本并在单击按钮时重新输入文本,我解决了问题。


1
2017-10-21 07:30



我现在看到同样的问题。我从UITextView关闭屏幕开始,然后按下按钮将其滑入。我在文本视图中加载了文本(超过10行)但是在用户触摸textview之前它没有显示。这看起来像一个iOS错误,或奇怪的“功能”。执行上述修复只会使第一行可见......呃。 - Jonny


UItextView 继承自 UIScrollView。这意味着它具有滚动功能。因此,如果的内容 UITextView 小到足以适合它的框架,它不需要滚动。

但是,如果它足够大,你需要滚动 UITextView

这有道理吗?

有关更多信息,请参阅类的参考 的UITextView


0
2017-10-12 10:36



这是真的,但我的情况是uitextView在滚动之前没有显示任何数据。至少它应该在滚动之前适合textview的数据量。不是吗? - Dinakar
是的,这是真的。让我来搜索一下......


确保你设置textview文本的方法被正确调用。你分配给文本视图的字符串是正确的字符串格式(如果不是这样保留它)。


0
2017-10-12 10:54





有机会 空格 和/或 换行符 是否在实际文本之前。在将这些字符分配给文本视图之前修剪它们。

NSCharacterSet *charset = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *text = [parsedString stringByTrimmingCharactersInSet:charset];
textview.text = text;

0
2017-10-12 11:00





请在加载textView时尝试使用它

NSAttributedString *oldtext = objTextView.attributedText;
[objTextView removeFromSuperview];
objTextView.attributedText = oldtext;
[self.view addSubview:objTextView];

在我的情况下,我的文字被归因


0
2018-01-08 08:17





当您完成解析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;

      });        

 });

0
2018-01-08 08:35