ios - 如何使 UISearchbar 变成矩形并与导航栏合并?
问题描述
您好我正在尝试将 UISearchbar 更改为矩形而不是圆角矩形并将其与具有相同颜色的导航栏合并。
导航栏的背景颜色应该与搜索栏的背景颜色相同,但有区别,并且显示的边缘清晰,两者都应该显示背景颜色#be1b25 而不是#bc303a。同样,文本字段仍然显示圆角矩形而不是完全矩形。
主视图控制器代码
@IBOutlet weak var searchBar: UISearchBar!
self.navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.backgroundColor = UIColor().HexToColor(hexString: REDCOLOR)
searchBar.backgroundColor = UIColor().HexToColor(hexString: REDCOLOR)
searchBar.tintColor = UIColor().HexToColor(hexString: REDCOLOR)
searchBar.barTintColor = UIColor().HexToColor(hexString: REDCOLOR)
searchBar.barStyle = .default
searchBar.placeholder = NetworkManager.sharedInstance.language(key: "searchentirestore")
searchBar.layer.cornerRadius = 0;
searchBar.clipsToBounds = false;
searchBar.barTintColor = UIColor().HexToColor(hexString: REDCOLOR)
searchBar.layer.borderWidth = 0
//searchBar.layer.borderColor = UIColor.clear as! CGColor
UISearchBar 扩展
extension UISearchBar {
private var textField: UITextField? {
return subviews.first?.subviews.flatMap { $0 as? UITextField }.first
}
private var activityIndicator: UIActivityIndicatorView? {
return textField?.leftView?.subviews.flatMap{ $0 as? UIActivityIndicatorView }.first
}
var isLoading: Bool {
get {
return activityIndicator != nil
} set {
if newValue {
if activityIndicator == nil {
let newActivityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
newActivityIndicator.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
newActivityIndicator.startAnimating()
newActivityIndicator.color = UIColor().HexToColor(hexString: BUTTON_COLOR)
newActivityIndicator.backgroundColor = UIColor.white
textField?.leftView?.addSubview(newActivityIndicator)
let leftViewSize = textField?.leftView?.frame.size ?? CGSize.zero
newActivityIndicator.center = CGPoint(x: leftViewSize.width/2, y: leftViewSize.height/2)
}
} else {
activityIndicator?.removeFromSuperview()
}
}
}
请提供任何帮助,这是 Swift 3。在此先感谢
解决方案
所以你正在处理一些事情
1 矩形UISearchbar
- 要么您将遍历本机的子视图
UISearchbar
并更改其右子层角半径,但这是一个hack,Apple 可以更改该层次结构,您将再次开始 - 你可以创建你自己的组件,看起来像
UISearchbar
,几个 UIViews,和UITextfield
一些 UIImageViews。 - GitHub 上有几个库可以使用https://github.com/CosmicMind/Samples
- iOS 11 UISearchBar in UINavigationBar也有类似的问题
2 与导航栏合并
- 一种方法是使用
UISearchController
iOS 11 - 或者您可以使用自定义 UISearchbar 将其添加到 NavBar 下方
UIView
,而不是在导航中,但在这种情况下, NavBar 不能是半透明的,因为您将永远无法获得相同的色彩空间 - 您可以将自定义视图作为自定义添加
UIView
到titleView
导航栏中
推荐阅读
- machine-learning - 为什么我得到不同的分数,我认为是相同的操作?
- javascript - 按钮内带有背景图像的锚标记重定向到背景 href 而不是按钮 Onclick Link
- c# - 如何在 C# 中的 .where 中包含子查询?
- java - 正则表达式用于替换 Java 中除 unicode 字母之外的任何内容
- php - 为什么我的 session_id() 没有被传递到下一页?
- vb.net - SelectCommand 属性在调用“填充”之前尚未初始化 - Visual Studio 2010
- python - 尺寸错误,在具有输入形状的 seq2seq 模型(操作:“添加”)中:[512,64]、[5739,64]
- sql - unicode 类型的 Oracle SQL regexp_like
- python - Python模拟失败调用断言
- html - 如何显示