UITextField具有.placeholder
文本属性,用于在将文本添加到字段之前显示信息,直到现在一直清晰可见,但是在iOS13中引入了暗模式,现在占位符文本几乎不可读在白色的UITextField中(我通过.backgroundColor = [UIColor whiteColor]
明确将其设置为白色)。
我的问题是,有什么实际的解决方案可以解决整个项目中的问题,我可以通过简单地设置一个attributedPlaceholder
字符串来手动更改任何UITextField上的占位符颜色,这可能会花费一些时间一种仅在UITextFields上禁用暗模式设置的方法,而对其他元素则不能?
答案 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
组件中
为我工作✌️