使用带有长文本的UITextView
时,我遇到了一种奇怪的行为。特别是,将maximumNumberOfLines
的{{1}}设置为0时,内容会完全消失。
我创建了一个小型测试项目,以确保我的代码中没有任何异常导致它,您可以在屏幕截图中看到它。在我的项目中,我有textContainer
,其中包含UIViewController
,其中包含垂直UIScrollView
。堆栈视图包含UIStackView
(屏幕截图中的红色标题),另一个包含标签,文本视图,按钮以及其他文本视图的堆栈视图。
单击按钮时,我将UITextView
设置为0(在它之前为2),内容就会消失。我已经尝试过有和没有动画,我也有同样的结果。
消失似乎与最终文本的高度有关,就像我使用较小的字体一样,只有在设置了更多文本后,内容才会消失。
任何想法为什么会发生?
为了完整性,我正在使用Xamarin.iOS和here 是我的ViewController。
答案 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);