首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UISearchController iOS 11定制

UISearchController iOS 11定制
EN

Stack Overflow用户
提问于 2017-08-13 17:43:22
回答 9查看 29K关注 0票数 58

在使用iOS 11之前,我一直在使用以下代码自定义UISearchController搜索栏的外观:

代码语言:javascript
运行
复制
var searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.setDefaultSearchBar()
searchController.searchResultsUpdater = self

if #available(iOS 11.0, *) {
    navigationItem.searchController = searchController
} else {
    tableView.tableHeaderView = searchController.searchBar
}

extension UISearchBar {
    func setDefaultSearchBar() {
        self.tintColor = UIColor.blue
        self.searchBarStyle = .minimal
        self.backgroundImage = UIImage(color: UIColor.clear)
        let searchBarTextField = self.value(forKey: "searchField") as! UITextField
        searchBarTextField.textColor = UIColor.white
        searchBarTextField.tintColor = UIColor.blue
        searchBarTextField = .dark
    }
}

但是,在iOS 11上运行相同的代码时,搜索栏的外观无法更新。

iOS 10:

iOS 11:

到目前为止,对这个问题的关注主要集中在搜索栏的文本颜色上。我看的不止这个-背景颜色,色调,搜索指示器,清晰按钮颜色,等等。

EN

回答 9

Stack Overflow用户

发布于 2017-09-02 04:26:48

我刚刚找到了设置它们的方法:(在布兰登和克鲁纳尔的帮助下,谢谢!)

“取消”文本:

代码语言:javascript
运行
复制
searchController.searchBar.tintColor = .white

搜索图标:

代码语言:javascript
运行
复制
searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.search, state: .normal)

清晰的图标:

代码语言:javascript
运行
复制
searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.clear, state: .normal)

搜索文本:

代码语言:javascript
运行
复制
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]

占位符:

代码语言:javascript
运行
复制
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])

白色背景:

代码语言:javascript
运行
复制
if #available(iOS 11.0, *) {
    let sc = UISearchController(searchResultsController: nil)
    sc.delegate = self
    let scb = sc.searchBar
    scb.tintColor = UIColor.white
    scb.barTintColor = UIColor.white

    if let textfield = scb.value(forKey: "searchField") as? UITextField {
        textfield.textColor = UIColor.blue
        if let backgroundview = textfield.subviews.first {

            // Background color
            backgroundview.backgroundColor = UIColor.white

            // Rounded corner
            backgroundview.layer.cornerRadius = 10;
            backgroundview.clipsToBounds = true;
        }
    }

    if let navigationbar = self.navigationController?.navigationBar {
        navigationbar.barTintColor = UIColor.blue
    }
    navigationItem.searchController = sc
    navigationItem.hidesSearchBarWhenScrolling = false
}

取自here

票数 78
EN

Stack Overflow用户

发布于 2017-12-04 10:57:01

若要正确地将键入到搜索栏中的文本设置为白色使用(当使用暗字段颜色时):

代码语言:javascript
运行
复制
searchController.searchBar.barStyle = .black

若要设置文本字段背景色,请执行以下操作

代码语言:javascript
运行
复制
if #available(iOS 11.0, *) {

        if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {
            if let backgroundview = textfield.subviews.first {

                // Background color
                backgroundview.backgroundColor = UIColor.white

                // Rounded corner
                backgroundview.layer.cornerRadius = 10;
                backgroundview.clipsToBounds = true;
            }
        }
    }

然而,使用类似于

代码语言:javascript
运行
复制
textfield.textColor = UIColor.blue

在上面似乎不起作用。

票数 10
EN

Stack Overflow用户

发布于 2017-09-26 03:08:10

尝试设置搜索栏的条形样式。

代码语言:javascript
运行
复制
searchController.searchBar.barStyle = UIBarStyleBlack;

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45663169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档