如何摆脱 UISearchBar 的边框?

Posted

技术标签:

【中文标题】如何摆脱 UISearchBar 的边框?【英文标题】:How to get rid of border of UISearchBar? 【发布时间】:2017-04-16 03:07:10 【问题描述】:

问题

我在 UIView 中嵌入了一个 UISearchController。搜索栏占据了整个视图的大小。但是,我不知道如何摆脱这个灰色边框。我希望搜索栏占据视图的整个大小,而没有那个讨厌的灰色边框。我怎样才能摆脱它?

我试过了

searchController?.searchBar.backgroundImage = UIImage()

但所做的只是使灰色边框清晰(更不用说它使 searchController 的 searchResultsController 不显示):

我希望边框消失,搜索栏占据 UIView 的整个框架。

【问题讨论】:

您是否添加了约束以将其固定到视图? @paper1111 我不使用约束。我通常使用框架。但是,如果您认为约束会起作用,您能否发布一个答案,其中包含我需要实现所述约束的代码? 您使用 Storyboard 还是 XIB? @paper1111 不,我都是以编程方式完成的 【参考方案1】:
let SEARCH_BAR_SEARCH_FIELD_KEY = "searchField"
let SEARCH_BAR_PLACEHOLDER_TEXT_KEY = "_placeholderLabel.textColor"

func customiseSearchBar() 

    searchBar.isTranslucent = true
    searchBar.backgroundImage =  UIImage.imageWithColor(color: UIColor.yellow, size: CGSize(width: searchBar.frame.width,height: searchBar.frame.height))

    //modify textfield font and color attributes
    let textFieldSearchBar = searchBar.value(forKey: SEARCH_BAR_SEARCH_FIELD_KEY) as? UITextField
    textFieldSearchBar?.backgroundColor = UIColor.yellow
    textFieldSearchBar?.font = UIFont(name: "Helvetica Neue" as String, size: 18)
    textFieldSearchBar?.setValue(UIColor.yellow, forKeyPath: SEARCH_BAR_PLACEHOLDER_TEXT_KEY)


extension UIImage 

    class func imageWithColor(color: UIColor, size: CGSize) -> UIImage 
        let rect: CGRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIRectFill(rect)
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    

这可以根据您的要求实现 UI,如果您需要对此进行更多自定义,请告诉我。顺便说一句,这是在 swift 3 中。

【讨论】:

以上是关于如何摆脱 UISearchBar 的边框?的主要内容,如果未能解决你的问题,请参考以下文章

移除 UISearchBar 的上下边框和阴影?

摆脱 UITableView 上方的行

UISearchBar的外观自定义,打造你的搜索框

UISearchBar的外观自定义,打造你的搜索框

iOS:带有 UISearchdisplaycontroller 的 UISearchBar 通过单击搜索栏崩溃

UISearchController 结果 TableViewController 在 UISearchBar 为空时不清除结果