首页 > 解决方案 > 不可能有白色背景的 UISearchBar?

问题描述

我真的认为将 UISearchBar 文本字段的背景颜色设置为白色会很容易。但无论我尝试什么,它总是保持灰白色/浅灰色 ( #efeff0)。

import UIKit

class ViewController: UIViewController {
  private let searchController = UISearchController()

  override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Hello World"
    view.backgroundColor = #colorLiteral(red: 0.9588784575, green: 0.9528519511, blue: 0.9350754619, alpha: 1)
    searchController.searchBar.searchTextField.backgroundColor = .white
    navigationItem.searchController = searchController
  }
}

在此处输入图像描述

如何使搜索栏具有纯白色背景色?应用程序是 iOS 13+,如果有帮助的话。

小测试项目:https ://github.com/kevinrenskers/WhiteSearch 。

标签: iosuikituisearchbar

解决方案


这是可能的。使用白色图像设置搜索字段的背景。

let size = CGSize(width: searchController.searchBar.frame.size.width - 12, height: searchController.searchBar.frame.size.height - 12)
let backgroundImage = createWhiteBG(size)!
let imageWithCorner = backgroundImage.createImageWithRoundBorder(cornerRadiuos: 10)!

searchController.searchBar.setSearchFieldBackgroundImage(imageWithCorner, for: UIControl.State.normal)

如果您不想将图像输入到应用程序。试试这个以编程方式创建一个。

func createWhiteBG(_ frame : CGSize) -> UIImage? {
    var rect = CGRect(x: 0, y: 0, width: 0, height: 0)
    rect.size = frame
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()
    context?.setFillColor(UIColor.white.cgColor)
    context?.fill(rect)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

extension UIImage {
    func createImageWithRoundBorder(cornerRadiuos : CGFloat) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(self.size, false, scale)
        let rect = CGRect(origin:CGPoint(x: 0, y: 0), size: self.size)
        let context = UIGraphicsGetCurrentContext()

        let path = UIBezierPath(
            roundedRect: rect,
            cornerRadius: cornerRadiuos
        )
        context?.beginPath()
        context?.addPath(path.cgPath)
        context?.closePath()
        context?.clip()
        self.draw(at: CGPoint.zero)
        context?.restoreGState()
        path.lineWidth = 1.5
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

推荐阅读