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

Posted

技术标签:

【中文标题】UITextView - 在 XCode 5 上设置字体不适用于 iOS 6【英文标题】:UITextView - setting font not working with iOS 6 on XCode 5 【发布时间】:2013-10-07 11:09:00 【问题描述】:

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

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

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

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

【问题讨论】:

这是 iOS 中最奇怪的错误,它仍然完全被破坏(2016 年中)。 【参考方案1】:

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

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

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

【讨论】:

这不是特定于 iphone,该修复适用于运行 ios 7.0.6 的 ipad air 很奇怪。我发现这一点的项目,它影响了 iOS 6 iPhone,但不影响 iOS 6 iPad 或 iOS 7 任何东西。但最好验证它是通用修复程序。 也适用于 textColor 谢谢,这个技巧对我有用...我使用的是 Xcode 6.2 和 iOS 8.2。 遗憾的是在 iOS9 中仍然需要。【参考方案2】:

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

所以我在 Storyboard Editor 中检查了 UITextView 的 'selectable' 属性以将其设置为 YES

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

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

【讨论】:

这其实也是我的问题。没有意义。 这里相同 - 在 Storyboard 中将文本设置为白色 - 在我设置为“可选择”之前没有任何反应保持“默认” - 为什么? 也为我工作。尽管在与同事交谈时,我们认为这可能是因为它导致 UITextView 重新绘制。【参考方案3】:

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

【讨论】:

这对我不起作用,但是在设置文本之后设置字体。去搞清楚。谢谢苹果! 检查“可选”或“可编辑”也对我有用。这绝对是苹果的一个错误。 这也适用于我的文本颜色。 问题和解决方案仍然适用于 iOS 9 (Xcode 7.3) 苹果真丢脸!刚刚偷走了我的时间!【参考方案4】:

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

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

【讨论】:

我们必须尝试随机混合代码才能让最基本的东西正常工作,这太疯狂了。这是唯一对我有用的。 @dragonflyesque 是的......它适用于 iOS 6。你在 iOS 9 上进行测试并且结果相同吗? 这帮助我解决了 iOS 8 的问题。【参考方案5】:

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

所以,我的解决方案是:

    在 IB 中设置 User Interaction Enabled = False 在 IB 中设置 Editable = True 在 IB 中设置 Selectable = True 以任何您想要的方式配置您的文本视图。

【讨论】:

【参考方案6】:

快速代码:

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)

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

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

总结一下,在Interface Builder使Editable and Selectable属性=YES,然后添加以下代码以备不时之需为假:

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

希望这会有所帮助,

【讨论】:

【参考方案9】:

对我有用的 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
    

【讨论】:

【参考方案10】:

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

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

如果我输入喜欢

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

那么字体的系列和大小不会改变,否则 当我反转这两个步骤时,它起作用了。设置文本应该在设置字体的系列/大小之前。

【讨论】:

【参考方案11】:

正如其他人所说:

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

p.s.无需先将isEditable 设置为true,因为它默认为true:短一点,更好一点

【讨论】:

【参考方案12】:

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

【讨论】:

以上是关于UITextView - 在 XCode 5 上设置字体不适用于 iOS 6的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:在 UITextView 内定位图像

Xcode 6 Storyboard 为 UITextView 设置错误的帧大小

没有显示 uitextview 的 uimenucontroller,通用应用程序 xcode 4

xcode中的UITextView问题

xcode 6无法滚动长的uitextview

SWIFT - 改变 UITextView 的高度,xcode 6 GM