Ios 以编程方式修改搜索栏高度及其文本字段高度是否是一种良好的做法?
我正在使用以下代码。它似乎也不起作用Ios 以编程方式修改搜索栏高度及其文本字段高度是否是一种良好的做法?,ios,swift,Ios,Swift,我正在使用以下代码。它似乎也不起作用 func configureSearchController(){ resultsController.tableView.delegate = self resultsController.tableView.dataSource = self self.searchController = UISearchController(searchResultsController: self.resultsController) //self.tableV
func configureSearchController(){
resultsController.tableView.delegate = self
resultsController.tableView.dataSource = self
self.searchController = UISearchController(searchResultsController: self.resultsController)
//self.tableView.tableHeaderView = self.searchController.searchBar
self.searchController.searchResultsUpdater = self
self.searchController.dimsBackgroundDuringPresentation = false
self.searchController.searchBar.sizeToFit()
searchController.searchBar.delegate = self
self.searchController.searchBar.scopeButtonTitles = []
for subView in searchController.searchBar.subviews {
for subViewOne in subView.subviews {
if subViewOne is UITextField {
searchTextField = subViewOne as! UITextField
subViewOne.backgroundColor = UIColor.white
var currentTextFieldBounds = subViewOne.bounds
currentTextFieldBounds.size.height = 45
subViewOne.bounds = currentTextFieldBounds
break
}
}
}
extendedLayoutIncludesOpaqueBars = true
definesPresentationContext = true
}
如果建议更改它们,我应该如何更正此代码
在Darshana的帮助下,它正在寻找,但我需要一些东西。当搜索栏处于活动状态时,它应该如下所示
添加代码不会更改处于聚焦状态(活动)的搜索栏图像。不建议通过迭代UISearchBar的子视图来更改UISearchBar的UITextField的高度 原因是,苹果公司可能会在未来决定使用UILayer或他们提出的任何其他组件创建UISearchBar,谁知道呢 如果需要,我们可以编写自己的自定义组件来实现这一点 话虽如此,如果仍然需要更改高度,则需要更改其约束,如下图所示,但不直接为其子视图的高度指定值
searchBar.heightAnchor.constraint(equalToConstant: 44).isActive = true
不,不建议通过迭代子视图来更改UIsearchbar的UITextfield的高度 如果您确实需要更改文本字段的高度,可以使用setSearchFieldBackgroundImage设置背景图像 文本字段的高度将与提供的图像的高度相同 示例代码:Swift 4.0
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect =
CGRect(x: 0, y: 0, width: size.width, height: size.height)
let path = UIBezierPath(roundedRect: rect, cornerRadius: 8.0)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
path.fill()
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
let image = self.getImageWithColor(color: UIColor.lightGray, size: CGSize(width: 20, height: 45))
searchBar.setSearchFieldBackgroundImage(image, for: .normal)
searchBar.searchBarStyle = .minimal;
searchBar.showsCancelButton = true;
这本质上是对的重新发布,添加了额外的思想。当然是@rmaddy。我想发布一个更好的问题形式。如果这取代了你的问题,也许可以删除你的旧问题it@AshleyMills好吧它不起作用。它说:“(UIContentContainer,CGSize)->CGSize”类型的值没有成员“宽度”;无法将类型为“(UIContentContainer,CGSize)->CGSize”的值转换为预期的参数类型“CGSize”,因为该类型的代码已复制,适用于我的swift 4.0。您使用的是什么swift版本?谢谢@Darshana,它很有魅力。唯一的问题是圆角不起作用。当它处于活动模式时,我需要另一个图像。请检查编辑的问题。谢谢你的帮助,为我工作。不知道为什么不为你工作。在角半径中传递的参数是什么?尝试将“cornerRadius:5.0”更改为所需的任意半径。首先尝试0,这样您就会注意到,它在5.0上发生了变化,如果您想要取消按钮,这是完全不同的问题。顺便说一句,你们可以从故事板的搜索栏中选择“显示取消”按钮。这并没有任何效果
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect =
CGRect(x: 0, y: 0, width: size.width, height: size.height)
let path = UIBezierPath(roundedRect: rect, cornerRadius: 8.0)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
path.fill()
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
let image = self.getImageWithColor(color: UIColor.lightGray, size: CGSize(width: 20, height: 45))
searchBar.setSearchFieldBackgroundImage(image, for: .normal)
searchBar.searchBarStyle = .minimal;
searchBar.showsCancelButton = true;