以编程方式创建的 UITextView 的奇怪字体行为

Strange font behaviour for programmatically created UITextView

我更喜欢用代码而不是使用 IB 创建我的界面,但我无法更改我创建的 UITextView 的字体大小。什么都不起作用。为了尝试调试问题,我使用 IB 在我的主视图中添加了一个 UITextView 以查看它是否有效 - 它确实有效。奇怪的是,我以编程方式创建的版本也可以工作,但只有当 IB 版本在视图中时。一旦我删除它,以编程方式创建的版本就会停止工作 - 字体大小不会改变。

使用 traits,我实际上可以关闭 IB 创建的版本,这样它就不会安装,因此永远不会出现,这仍然允许以编程方式创建的版本工作。

还有其他人看到了吗?在 IB 中使用随机元素并不是世界末日,但它令人沮丧,并且是将来 explain/debug 很难做到的事情。

fullWidthDetailText.isEditable = true
fullWidthDetailText.isSelectable = true
fullWidthDetailText.font = UIFont(name: "Roboto", size: 50)
fullWidthDetailText.adjustsFontForContentSizeCategory = false
fullWidthDetailText.text = "Hello world"
fullWidthDetailText.backgroundColor = UIColor.clear
fullWidthDetailText.textColor = UIColor.white
fullWidthDetailView.addSubview(fullWidthDetailText)

大多数 iOS 设备上没有安装 Roboto。这是传统的 Android 字体,而不是 iOS 字体。所以 UIFont(name: "Roboto", size 50) returns 零。如果你选择安装在 iOS 上的字体(例如 Helvetica,它与 Roboto 非常接近),我无法重现此问题;文本按预期以 50pt 字体显示。同样 .systemFont(ofSize: 50) 似乎工作正常。

字体名称可能不正确。我希望它类似于 "Roboto-Regular" 但为了绝对确定,将所有可用字体的名称打印到您的控制台并找到您想要的字体:

for family in UIFont.familyNames.sorted() {
    print("\(family): ", UIFont.fontNames(forFamilyName: family).sorted().joined(separator: ", "))
}

详情见How to check if a font is available in version of iOS?

请注意,字体名称通常不是用户友好的,Interface Builder 实际上显示 字体系列

如果您仍然遇到问题,请参阅 向您的应用程序添加自定义字体 并验证您是否已正确完成所有操作。