为什么焦点上的searchBar会略微改变文本的颜色?

时间:2017-02-07 13:51:00

标签: swift swift3 uisearchbar tvos

编辑2

仔细检查后,键盘似乎与此问题直接相关。

searchController.searchBar.keyboardAppearance = UIKeyboardAppearance.dark

键盘的外观似乎会影响searchBar文本的颜色。我不知道为什么会这样。键盘的默认外观为黑色,因此当键盘可见时,searchBar文本将变为黑色。当键盘被解除时,searchBar文本将恢复为我指定的原始颜色(白色)。

修改

仔细检查后,问题似乎与键盘直接相关。只要键盘处于活动状态(意味着可见且未被解除),则文本的颜色会有所不同。

当键盘被解除时,颜色会发生变化。

会认为“焦点”不是问题。

同样searchController.searchBar.setTextColor(color: .white)和“注意到”的色调颜色是两个完全不同的东西。它们根本没有联系。

描述

我已将searchBar的文字颜色设置为white,但是当searchBar处于焦点时,颜色会有轻微的“色调”它。

我在引号中添加了色调,因为我实际上试图将searchBar的色调颜色设置为白色,没有任何运气。

代码:

以下是我用来创建SearchController的代码。此代码是我的AppDelegate中调用的函数的一部分,并添加到我的TabBarController

        //... more code above
        //Inside function called "configureSearchController" within AppDelegate
        let searchController = UISearchController(searchResultsController: searchResultsController)
        searchController.searchResultsUpdater = searchResultsController
        searchController.searchBar.placeholder = NSLocalizedString("Enter keyword (e.g. Gastric Bypass)", comment: "")
        searchController.view.backgroundColor = Constants.Color.backgroundColorDark
        searchController.searchBar.keyboardAppearance = UIKeyboardAppearance.dark
        searchController.searchBar.backgroundColor = Constants.Color.backgroundSearchBarColor

        //Here is where I set the color of the search bar text.
        searchController.searchBar.setTextColor(color: .white)

        //Here is where I attempt to remove any possible color changes
        //or effect... none of the following 2 lines work
        searchController.searchBar.tintColor = .white
        searchController.searchBar.barTintColor = .white

        searchController.hidesNavigationBarDuringPresentation = false
        searchController.obscuresBackgroundDuringPresentation = true
        searchController.searchBar.searchBarStyle = .minimal
        searchController.searchBar.sizeToFit()

        //... more code below

截图:

image on focus

上图显示了焦点中的searchBar以及带有轻微绿色的文本。

image not on focus

上图显示searchBar不在焦点,文字白色

问题:

为什么焦点上的searchBar会略微改变文本的颜色?

1 个答案:

答案 0 :(得分:0)

当键盘处于活动状态时,键盘外观会影响searchBar文本。向searchBar添加自定义外观不是一个好主意。最好的解决方法是使用默认外观。

extension UIColor {
    convenience init(hexString: String) {
        let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        var int = UInt32()
        Scanner(string: hex).scanHexInt32(&int)
        let a, r, g, b: UInt32
        switch hex.characters.count {
        case 3: // RGB (12-bit)
            (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6: // RGB (24-bit)
            (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
        case 8: // ARGB (32-bit)
            (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            (a, r, g, b) = (1, 1, 1, 0)
        }
        self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
    }
}

searchController.searchBar.keyboardAppearance = UIKeyboardAppearance.dark
searchController.searchBar.setTextColor(color: UIColor.init(hexString: "#c5c5c5"))

十六进制" #c5c5c5"对应键盘暗色外观的关键颜色。这样,当键盘被解除或变为活动状态时,searchBar文本中的颜色没有变化。