66

我正在为我的 UI 使用故事板。我以前使用 XCode 4.6 并在 iOS 6 上发布。此后我使用 XCode 5 更新到 iOS 7 并更新了 Storyboard 以与 XCode 5 很好地配合使用。但我有一个问题:

UITextView不想在代码中显示字体更改。文本颜色更改工作正常。任何其他属性更改都可以。字体,一点也不。我使用的是自定义字体,所以我检查了不同大小的不同字体(即systemFontOfSize:),但这不起作用。文本视图显示情节提要中设置的字体。我在这里能错过什么?是否有任何与此类事情混淆的自动布局约束?在迁移过程中我遇到了一些约束问题,但正如我所说,字体在 iOS 7 中运行良好。

我想这是我在 Storyboard 中缺少的东西,就好像我UIViewController在代码中创建并添加了一个文本视图一样,它工作正常。

我会放一些代码,但我不确定在这种情况下它是否有帮助。

4

12 回答 12

114

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

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

textView.editable = YES;
textView.font = newFont;
textView.editable = NO;
于 2013-10-03T20:27:01.263 回答
74

就我而言,这是 UITextView 的“可选择”属性的问题。

所以我在 Storyboard Editor 中检查了 UITextView 的“可选”属性以将其设置为 YES 设置可选

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

textview.text = @"some text";
textview.selectable = NO;
于 2013-12-17T06:38:19.717 回答
56

该问题是由editable情节提要中的属性错误引起的。我完全不知道为什么这会导致字体保持不变——而且只在 iOS 6 上。

于 2013-10-01T11:04:57.310 回答
20

对我来说,如果您设置 UITextView 的文本并在设置字体(颜色相同)之后,它是可行的:

_myTextView.text = @"text";
[_myTextView setFont:[UIFont fontWithName:@"Helvetica Neue" size:18.0f]];
_myTextView.textColor = [UIColor whiteColor];
于 2013-10-03T20:35:18.430 回答
13

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

所以,我的解决方案是:

  1. 在 IB 中设置用户交互启用 = False
  2. 在 IB 中设置Editable = True
  3. 在 IB 中设置Selectable = True
  4. 以您想要的任何方式配置您的文本视图。
于 2016-03-10T14:53:01.030 回答
11

快速代码:

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)
于 2014-12-07T21:05:20.477 回答
7

我发现字体大小被忽略了。这通过勾选名为的复选框来解决:可选(在情节提要中选择了 UITextView)

于 2015-09-23T19:37:28.760 回答
5

此问题仅在 Interface Builder 中将 Selectable 属性设置为 FALSE 时发生。

如果您需要将 Editable 和 Selectable 属性设置为 FALSE,请从 CODE 而不是在 Interface Builder 中进行。

总结一下,在Interface Builder中使 Editable 和 Selectable属性 = YES,然后添加以下代码以防您需要属性为 FALSE:

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

希望这可以帮助,

于 2016-01-01T19:08:41.277 回答
1

对我有用的 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
    }
}
于 2017-05-03T11:39:22.853 回答
0

就我而言,我通过在“viewDidLayoutSubviews”中设置新字体来解决。

于 2020-08-13T06:13:02.060 回答
0

就我而言(在 Xcode 7.3、iOS 9 上开发),

原因是设置文本和字体系列/大小的顺序,而不是许多答案告诉那里的可编辑或可选择的选项。(我没有得到任何情节提要,那个Textview上的xib。)

如果我输入喜欢

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

那么字体的系列和大小不会改变,但是当我反转这两个步骤时,它可以工作。设置文本应该在设置字体的系列/大小之前。

于 2016-04-09T07:51:04.533 回答
0

正如其他人所说:

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

ps不需要先设置isEditabletrue因为它是true默认的:短一点,好一点

于 2017-03-22T17:25:28.587 回答