ios - 不可能有白色背景的 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 。
解决方案
这是可能的。使用白色图像设置搜索字段的背景。
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
}
}
推荐阅读
- linux - 如何使用 netcore 在 Linux centos 7 中加载 DevExpress 报告
- r - 有条件地将命名元素添加到列表中
- c++11 - enable_if 用法之间的区别
- function - 云功能部署问题
- jmeter - 如何用JMeter中的动态值替换具有特殊字符的文件内容
- python - 使用 scikit-fmm 或 gdist 在 3d 三角形网格上的测地线距离
- javascript - 如何在不使用 Angular Material 中的绝对位置的情况下将 mat-list-items 推到底部?
- javascript - 如何加载新的 html 页面并使用通过动态对象的 onclick 获得的元素?
- django - django 中的网络和移动身份验证
- node.js - Heroku Node.js WebSocket 服务器聊天部署