UITextView – 在XCode 5上设置字体不适用于iOS 6

我正在使用故事板为我的用户界面。 我以前使用XCode 4.6并在iOS 6上发布。我已经使用XCode 5更新到iOS 7,并更新了Storyboard以与XCode 5很好地协作。我有一个问题:

UITextView不希望在代码中显示字体更改。 文本颜色更改正常工作。 任何其他财产变化都可以。 字体,而不是。 我使用自定义字体,所以我检查了不同的字体大小(即systemFontOfSize: ,但没有奏效。 文本视图显示在故事板中设置的字体。 我可以在这里错过什么? 是否有任何自动布局约束混乱这种事情? 在迁移过程中,我遇到了一些限制问题,但正如我所说的,iOS 7中的字体效果很好。

我想这是故事板中的东西,我失踪了,就像我创build一个UIViewController并在代码中添加文本视图,它工作正常。

我提出了一些代码,但我不确定在这种情况下会有所帮助。

更奇怪的是,这只发生在iPhone上,而不是iPad上。

如果您在代码中设置字体,并且不想要可编辑的文本视图,请执行以下操作:

 textView.editable = YES; textView.font = newFont; textView.editable = NO; 

在我的情况下,它是UITextView的“可选”属性的问题。

所以我在Storyboard Editor中检查了UITextView的'selectable'属性来设置YES 设置可选

稍后在viewWillAppear中将此属性设置为NO。

 textview.text = @"some text"; textview.selectable = NO; 

该问题是由故事板中的editable属性为false造成的。 我完全不知道为什么这会导致字体保持不变 – 只在iOS 6上。

对我来说,这是工作,如果你设置你的UITextView的文本,并设置字体(颜色相同)后:

 _myTextView.text = @"text"; [_myTextView setFont:[UIFont fontWithName:@"Helvetica Neue" size:18.0f]]; _myTextView.textColor = [UIColor whiteColor]; 

谢谢你们所有的答案。 问题仍然存在于iOS9上。 我发现,当你在Interface Builder中设置“ User Interaction Enabled = false ”时,你可以离开EditableSelectable = true ,用户将不能编辑文本视图。

所以,我的解决scheme是:

  1. 在IB中设置用户交互已启用= False
  2. 在IB中设置Editable = True
  3. 在IB中设置Selectable = True
  4. 以任何你想要的方式configuration你的文本视图。

代码为swift:

 textOutlet.editable = true textOutlet.textColor = UIColor.whiteColor() textOutlet.font = UIFont(name: "ArialMT", size: 20) textOutlet.editable = false 

或者,如果你先改变文字,它会神奇地被解决

 textOutlet.text = "omg lol wtf" textOutlet.textColor = UIColor.whiteColor() textOutlet.font = UIFont(name: "ArialMT", size: 20) 

我发现字体大小被忽略。 这是通过勾选名为Selectable的checkbox来解决的(在故事板中select了UITextView)

只有在Interface Builder中将Selectable属性设置为FALSE时,才会出现此问题。

如果您需要将可编辑和可选属性设置为FALSE,请从CODE执行,而不是在Interface Builder中执行。

总结一下,在Interface Builder中 编辑可选和可选属性= YES ,然后添加以下代码,以防需要属性为FALSE:

 _textView.editable = NO; _textView.selectable = NO; 

希望这可以帮助,

Swift 3类为我工作:

 extension UITextView { func setFontAndUpdate(_ font: UIFont?) { self.font = font // Font doesn't update without text change let text = self.text self.text = nil self.text = text } } 

在我的情况下(在Xcode 7.3,iOS 9上开发),

原因是设置文本和font-family / size的顺序,而不是可编辑或可选的许多答案告诉那里(我没有得到任何故事板,在该Textview XIB)。

如果我input像

 [myTextView setFont:[UIFont fontWithName:@"HelveticaNeue-Italic" size:20]]; myTextView.attributedText = mAttStr; 

那么字体的家庭和大小不会改变,但是当我颠倒这两个步骤,它的作品。 设置文本应该超过设置字体的家庭/大小。

正如其他人所说:

 textView.font = UIFont.systemFont(ofSize: 16) textView.isEditable = false 

ps不需要首先将isEditable设置为true因为默认情况下它是true :稍微短一些,好一点