UITextField占位符文本在iOS13暗模式下不可读

时间:2019-10-21 01:29:06

标签: objective-c uitextfield ios13 ios-darkmode

UITextField具有.placeholder文本属性,用于在将文本添加到字段之前显示信息,直到现在一直清晰可见,但是在iOS13中引入了暗模式,现在占位符文本几乎不可读在白色的UITextField中(我通过.backgroundColor = [UIColor whiteColor]明确将其设置为白色)。

我的问题是,有什么实际的解决方案可以解决整个项目中的问题,我可以通过简单地设置一个attributedPlaceholder字符串来手动更改任何UITextField上的占位符颜色,这可能会花费一些时间一种仅在UITextFields上禁用暗模式设置的方法,而对其他元素则不能?

4 个答案:

答案 0 :(得分:3)

事实证明,Apple提供了一种使用以下(Objective-C)覆盖各种元素(甚至整个应用程序的UIWindow)的方法:

if (@available(iOS 13.0, *)) {
    textField.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}

我通过swizzle将其应用于所有UITextField,以在项目中的所有内容上将其关闭,只需在您的appDelegate didFinishLaunching方法中使用此方法,然后将textField替换为_window

重要编辑:,似乎已删除了xCode的最新版本_window,现在应用程序项目创建了一个名为SceneDelegate的东西,必须应用overrideUserInterfaceStyle某种程度上,但是我是场景委托的新手,不知道他们如何工作,因此我在那儿不能提供太多帮助,因为AppDelegate _window方法,我现在在每个ViewController中都设置了overrideUserInterfaceStyle当您的项目使用SceneDelegate时不再起作用。也许以后有人可以在下面的注释中提供见解?)

答案 1 :(得分:1)

迅速 将以下代码粘贴到appdelegate文件

??

它将正常工作。

答案 2 :(得分:1)

我会考虑不将文本字段背景明确设置为白色。

您可以通过使用https://developer.apple.com/documentation/uikit/uicolor/ui_element_colors

中描述的UI元素颜色来更强大地支持暗和亮模式。

对于我的一个文本字段,我做了这样的事情:

if #available(iOS 13, *) {
    self.searchBarTextField.textColor = UIColor.label
    self.searchBarTextField.backgroundColor = UIColor.secondarySystemBackground
} else {
    self.searchBarTextField.backgroundColor = UIColor(white: 1.0, alpha: 1.0)
}

根据上面的代码,当用户更改明暗模式设置时,文本字段的背景将动态变化。文字颜色也会随之改变。通过占位符,文本颜色将由OS处理。如果需要,您可以覆盖:https://developer.apple.com/documentation/uikit/uicolor/3173134-placeholdertext

答案 3 :(得分:0)

如果您不想以最简单的方式强制将完整应用程序设为亮模式

您可以将placeholderTextColor添加到您的TextInput组件中

为我工作✌️