11

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

我的问题是,在我的项目中解决这个问题有哪些实用的解决方案,我可以手动更改任何 UITextField 上的占位符颜色,只需设置一个attributedPlaceholder字符串,这可能需要一段时间,有没有办法禁用暗模式设置专门针对 UITextFields 而不是针对其他元素?

4

4 回答 4

21

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

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

我通过 swizzle 将它应用到所有 UITextFields,在你的项目中关闭它,只需在你的 appDelegate didFinishLaunching 方法中使用它,但替换textField_window

重要编辑:最新版本的 xCode _window 似乎已被删除,现在应用程序项目创建了一个名为 aSceneDelegate的东西,并且overrideUserInterfaceStyle必须以某种方式应用于它,但我是场景代表的新手,不知道它们是如何工作的所以我无法提供太多帮助,禁用场景并返回 UIWindow 的传统 AppDelegate 管理,请参见此处:https ://stackoverflow.com/a/57467270/2057171 )

于 2019-10-21T02:05:05.190 回答
10

在 swift 中将以下代码粘贴到 appdelegate 文件中

if #available(iOS 13.0, *) {
            window!.overrideUserInterfaceStyle = .light
        }

它会正常工作。

于 2019-12-07T13:49:58.420 回答
3

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

您可以通过使用此处描述的 UI 元素颜色更强大地​​支持深色和浅色模式:https ://developer.apple.com/documentation/uikit/uicolor/ui_element_colors

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

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)
}

从上面的代码中,现在当用户更改他们的明暗模式设置时,您的文本字段的背景将动态变化。并且文字颜色会随之改变。并且占位符文本颜色将由操作系统处理。如果需要,您可以覆盖:https ://developer.apple.com/documentation/uikit/uicolor/3173134-placeholdertext

于 2020-02-24T01:51:26.453 回答
-1

如果您不想以最简单的方式强制整个应用程序进入灯光模式

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

为我工作✌️

于 2020-02-24T13:49:48.200 回答