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”时,您可以保留 Editable 和 Selectable = 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 6 Storyboard 为 UITextView 设置错误的帧大小