UITextView - 一些字体会导致文字消失

4

我在使用 UITextView 时遇到了一个有趣的问题。我使用以下代码在视图控制器的 loadView 中将文本视图放置在屏幕上:

self.textView = [[UITextView alloc] init];
if (self.tutorialPage.text.length > 0)
{
    self.textView.backgroundColor = [UIColor clearColor];
    self.textView.editable = NO;
    self.textView.text = self.tutorialPage.text;
    self.textView.showsVerticalScrollIndicator = NO;
    self.textView.textColor = [UIColor whiteColor];
    self.textView.textAlignment = NSTextAlignmentLeft;
    self.textView.translatesAutoresizingMaskIntoConstraints = NO;
    //Later constraints are added
}

UIFont *font = [UIFont fontWithName:@"Noteworthy-Bold" size:(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 20.0 : 15.0)];
self.textView.font = font;
[self.view addSubview:self.textView];

顺便说一句,这段代码中的每一行都会被调用,文本视图肯定在屏幕上。但不知何故,当再次调用此代码以创建相同类型的另一个视图控制器时,文本不会显示出来。然而,当我通过轻按和长按来选择文本视图中的文本时,文本突然出现了。

更奇怪的是,当我改变了这行代码

UIFont *font = [UIFont fontWithName:@"Noteworthy-Bold" size:(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 20.0 : 15.0)];

要使用不同的字体名称,例如@"Noteworthy-Light"@"TimesNewRomanPS-BoldMT",文本视图会像预期的那样正常工作... 这个问题的原因是什么?

有人以前见过这个问题吗?如果是,请分享您是如何解决或避免它的。


在viewDidLoad中使用它 - LE SANG
尝试将所有的视图加载代码都放入viewDidLoad中,除了分配视图的部分,但是没有成功。我没有使用IB来管理这个视图控制器,因此loadView是我创建所有子视图并添加约束的地方。 - architectpianist
有时候,你使用的操作系统或字体类型只适用于某些情况。这可能很奇怪,因为它取决于你实际使用的字体。即使你使用像Georgia这样常见的字体,它的行为也会与使用AppleGothic不同。 - user2277872
事实证明,如果我将文本视图的宽度从688更改为约512,文本就会停留在那里。我已经测试了Noteworthy Bold、Light和Helvetica Bold和Regular,它们似乎都在510-520左右工作。但我的问题是,为什么这对文本视图很重要呢? - architectpianist
它是否自动换行?UITextView 只显示一行,而较大的字体会自动换行并插入新行,将文本推出框架吗? - Randy James
@Randy 嗯,我的文本大约有四到五行,宽度为512像素,要么全部显示,要么不显示。如果不显示,选择文本会导致它一次性出现。但由于这是一个不可编辑的文本视图,我不希望用户需要点击它。所以现在它可以正常工作了,我只是好奇为什么会发生这种情况。 - architectpianist
2个回答

1

我曾经遇到过类似的问题。我通过首先设置UIFont,然后设置UIColour + NSTextAlignment来解决它。简而言之,你需要设置:字体 -> 颜色/其他属性。


0
如果你想让那个文本框成为第一响应者,那么请在viewDidAppear中设置它,而不是在viewWillAppear中。这样你的问题就会得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接