Alb*_*haw 10 objective-c uitextfield ios13 ios-darkmode
UITextField 有一个.placeholdertext 属性,用于在文本添加到字段之前显示信息,到目前为止它一直清晰可见,但在 iOS13 暗模式中引入,现在占位符文本在白色 UITextField 中几乎不可读(我明确表示通过.backgroundColor = [UIColor whiteColor])使其变白。
我的问题是,在我的整个项目中有哪些实用的解决方案可以解决这个问题,我可以手动更改任何 UITextField 上的占位符颜色,只需设置一个attributedPlaceholder字符串,这可能需要一段时间,有没有办法禁用暗模式设置专门针对 UITextFields 而不是针对其他元素?
Alb*_*haw 20
事实证明,Apple 提供了一种使用以下(Objective-C)在各种元素(甚至整个应用程序的 UIWindow)上覆盖它的方法:
if (@available(iOS 13.0, *)) {
textField.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
Run Code Online (Sandbox Code Playgroud)
我通过 swizzle 将它应用到所有 UITextFields,在你的项目中关闭它,只需在你的 appDelegate didFinishLaunching 方法中使用它,但替换textField为_window
(重要编辑:最新版本的 xCode _window 似乎已被删除,现在应用程序项目创建了一个名为 a 的东西SceneDelegate,并且overrideUserInterfaceStyle必须以某种方式应用于它,但我是场景委托的新手,不知道它们是如何工作的所以我无法提供太多帮助,禁用scenedelegate 并返回到UIWindow 的传统AppDelegate 管理,请参见此处:https ://stackoverflow.com/a/57467270/2057171 )
在 swift 中将以下代码粘贴到 appdelegate 文件
if #available(iOS 13.0, *) {
window!.overrideUserInterfaceStyle = .light
}Run Code Online (Sandbox Code Playgroud)
它会正常工作。
我会考虑不明确将文本字段背景设置为白色。
您可以通过使用此处描述的 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)
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码中,现在当用户更改其浅色与深色模式设置时,文本字段的背景将动态更改。并且文字颜色也会随之改变。并且通过占位符文本颜色将由操作系统处理。如果需要,您可以覆盖:https://developer.apple.com/documentation/uikit/uicolor/3173134-placeholdertext
| 归档时间: |
|
| 查看次数: |
6792 次 |
| 最近记录: |