当行数设置为0时,UITextView内容消失

时间:2018-04-24 12:09:24

标签: ios xamarin xamarin.ios textview uitextview

使用带有长文本的UITextView时,我遇到了一种奇怪的行为。特别是,将maximumNumberOfLines的{​​{1}}设置为0时,内容会完全消失。

我创建了一个小型测试项目,以确保我的代码中没有任何异常导致它,您可以在屏幕截图中看到它。在我的项目中,我有textContainer,其中包含UIViewController,其中包含垂直UIScrollView。堆栈视图包含UIStackView(屏幕截图中的红色标题),另一个包含标签,文本视图,按钮以及其他文本视图的堆栈视图。

单击按钮时,我将UITextView设置为0(在它之前为2),内容就会消失。我已经尝试过有和没有动画,我也有同样的结果。 消失似乎与最终文本的高度有关,就像我使用较小的字体一样,只有在设置了更多文本后,内容才会消失。

任何想法为什么会发生?

为了完整性,我正在使用Xamarin.iOS和here  是我的ViewController。

Before

After

1 个答案:

答案 0 :(得分:1)

内容消失,因为您的文字太大而无法展示UIView对象。根据这个post我们知道,实际上UIView的最大高度和宽度受它们消耗的内存量的限制。

在我的测试中,如果我们没有为textView设置太多字符(删除一些textView.Text += textView.Text;),则会显示内容。我也在UILabel上测试了它,它也是如此。因为它们都继承自UIView

如果您确实要显示这么多字符串,请尝试启用textView的ScrollEnabled。不要让textView的Bounds超出最大限制。如果要展开textView:

,可以尝试添加高度和宽度约束
var textViewContraints = new NSLayoutConstraint[]
{
    NSLayoutConstraint.Create(textView, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1f, 700),
    NSLayoutConstraint.Create(textView, NSLayoutAttribute.Width, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1f, 500)
};

UIView.AnimateNotify(1.2d, () =>
{
    if (!buttonExpanded)
    {
        textView.ScrollEnabled = true;
        textView.TextContainer.MaximumNumberOfLines = 0;
        textView.TextContainer.LineBreakMode = UILineBreakMode.WordWrap;
        textView.SizeToFit();
        textView.AddConstraints(textViewContraints);
        expandButton.Transform = CGAffineTransform.MakeRotation((nfloat)(Math.PI / 2.0f));

        textView.Text = "r" + textStr;
        textView.Text = textView.Text.Substring(1);
    }
    else
    {
        textView.ScrollEnabled = false;
        foreach (NSLayoutConstraint constraint in textView.Constraints)
        {
            textView.RemoveConstraint(constraint);
        }
        textView.TextContainer.MaximumNumberOfLines = 3;
        textView.TextContainer.LineBreakMode = UILineBreakMode.WordWrap;
        expandButton.Transform = CGAffineTransform.MakeRotation(0f);

        textView.Text = textStr;
    }

    scrollView.LayoutIfNeeded();
    buttonExpanded = !buttonExpanded;
}, null);