Содержимое UITextView исчезает, когда число строк установлено на 0 - PullRequest
0 голосов
/ 24 апреля 2018

Я сталкиваюсь со странным поведением при использовании UITextView с длинным текстом.В частности, когда для maximumNumberOfLines его textContainer установлено значение 0, содержимое полностью исчезает.

Я создал небольшой тестовый проект, чтобы убедиться, что в моем коде нет ничего странного, что его вызывало,и вы можете увидеть это на скриншотах.В моем проекте у меня есть UIViewController, который содержит UIScrollView, который содержит вертикаль UIStackView.Представление стека содержит UITextView (красный заголовок на снимках экрана), другое представление стека, содержащее метку, представление текста, кнопку, а затем другие представления текста.

Когда кнопка нажата, я задаю maximumNumberOfLines до 0 (раньше было 2), и контент просто исчезает.Я пробовал с и без анимации, и у меня такой же результат.Исчезновение, по-видимому, связано с высотой окончательного текста, так как если я использую шрифт меньшего размера, содержимое исчезает только после задания гораздо большего объема текста.

Есть идеи, почему это могло произойти?

Для полноты я использую Xamarin.iOS, а здесь - мой ViewController.

Before

After

1 Ответ

0 голосов
/ 26 апреля 2018

Содержимое исчезает, потому что ваш текст слишком велик для объекта UIView.Согласно этой записи мы знаем, что на самом деле UIView имеет максимальную высоту и ширину, ограниченную количеством используемой ими памяти.

В моем тесте, если мы не установим слишком много символов в textView (удалите некоторые textView.Text += textView.Text;), содержимое будет отображаться.И я также проверил это на UILabel, тоже самое.Поскольку все они наследуются от UIView.

Если вы хотите показать так много строк, попробуйте включить textView в ScrollEnabled.Не позволяйте границам textView превышать максимальный предел.Вы можете попытаться добавить ограничения высоты и ширины, когда хотите развернуть 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);
...