【问题标题】:UITextField placeholder text is unreadable in iOS13 dark modeUITextField 占位符文本在 iOS13 暗模式下不可读
【发布时间】:2020-02-17 02:20:02
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c uitextfield ios13 ios-darkmode


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      它会正常工作的。

      【讨论】:

      • 谢谢!拯救了我的一天
      【解决方案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

      【讨论】:

      • 对于我的特定项目,我必须有白色,但这对其他人(将来可能还有我自己)有用,谢谢分享!
      【解决方案4】:

      如果您不想以最简单的方式强制整个应用进入轻量模式

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

      为我工作✌️

      【讨论】:

      • 我似乎在内置框架中找不到placeholderTextColor。你是怎么用的?
      • reactnative.dev/docs/textinput#placeholdertextcolor 类似的东西,如果对你有帮助,请告诉我)<TextInput placeholder="text here" placeholderTextColor="red" />
      • 哦,可能我错了,我以为你说的是​​ React Native
      猜你喜欢
      • 2020-02-14
      • 2016-05-10
      • 2015-12-21
      • 2014-02-17
      • 2012-01-21
      • 2010-11-23
      • 2016-02-21
      • 2016-10-07
      • 2015-12-26
      相关资源
      最近更新 更多