UISearchController 自定义高度的坑

作者: YxxxHao | 来源:发表于2017-04-05 19:20 被阅读266次

    项目里需要自定 UISearchController 的高度,本来这很简单的一件事,结果折腾了不少时间,主要是设置高度时遇到了坑,目测在 OC 时并没有发现什么问题,只有在 Swift 上才发现有问题。。。这里记录下,备忘!!!

    正常流程就是继承 UISearchController,然后重写 init 方法:

    class JCSearchController: UISearchController {
        
        override init(searchResultsController: UIViewController?) {
            super.init(searchResultsController: searchResultsController)
            _init()
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
            super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
            _init()
        }
       
        private func _init() {
            self.dimsBackgroundDuringPresentation = false
            self.hidesNavigationBarDuringPresentation = true
            self.searchBar.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 31)
            self.searchBar.barStyle = .default
            self.searchBar.backgroundColor = .white
            self.searchBar.barTintColor = .white
            self.searchBar.delegate = self
            self.searchBar.autocapitalizationType = .none
            self.searchBar.placeholder = "搜索"
            self.searchBar.layer.borderColor = UIColor.white.cgColor
            self.searchBar.layer.borderWidth = 1
            self.searchBar.layer.masksToBounds = true
        }
    }
    

    多么简单的一件事,但结果有输入时内容时,JCSearchController 的高度变大了,可以通过 searchBarTextDidEndEditing 等方式查看 searchBar 的确是变大了,但以前在 OC 上并没有这个问题,回头再研究下的,现在说下解决方法吧。

    搜索了下,说可以通过 searchBarTextDidEndEditing 等方法中重新设置 searchBar 的 frame.size.height,设置后部分情况的克是可以解决的, 但点 取消 按键时,高度又不正常的,自己也思考了下,如果他的大小变化了,就一定会调用 viewDidLayoutSubviews, 还有其它情况下,同时在 viewDidDisappear 中也重新设置高度就可以,经过测试可以覆盖所有的情况了,完整的代码如下:

    override func viewDidDisappear(_ animated: Bool) {
            super.viewDidDisappear(animated)
            var frame = self.searchBar.frame
            frame.size.height = 31
            self.searchBar.frame = frame
        }
        
        override func viewDidLayoutSubviews() {
              
            super.viewDidLayoutSubviews()
            // 去除边黑边
            self.searchBar.layer.borderColor = UIColor.white.cgColor
            self.searchBar.layer.borderWidth = 1
            self.searchBar.layer.masksToBounds = true
            
            var frame = self.searchBar.frame
            frame.size.height = 31
            self.searchBar.frame = frame
        }
    

    这里也顺便提下如何 UISearchController 将取消按键的 “cancel” 改为中方的,网上应该有各种各样的通过subview来遍历出来取消的 button,然后再去设置title,其实如果你项目是中文的,就在info.plist里把语言(Localization native development region)设置为 China 就可以了,cancel 会自动转换成中文的取消。

    关于最近

    最近好久没有更新文章了,其实最近很忙,不单是工作上的,还有生活上的,母亲住院动手术了,回去老家照看,随着年龄的增长,觉得自己的责任越来越大了,慢慢觉得最害怕的一句话是:“树欲静,而风不止;子欲养,而亲不待”,只想好好珍惜当下,多陪下家人,也许只是简单的一通电话,几个小时的车程,一个周末的时间,多聊聊,多回去看下,这是家人最大的愿望了。这次回家,父亲对我说:“爸妈老了,不像年轻时了,生病的时候也希望子女能陪在身份”,那时心里真的很酸,这话是从父亲口中说出来的,真的很愧疚,回首看下,原来父母真的老了,希望我们都能多陪伴下自己的父母吧。

    最近同时也写了一个 RSS 的订阅器:趣阅, 你可以在 App Store 上下载体验,这个工具主要是方便自己的使用,平常时坐公车、地铁时,只可以利用碎片时间来读读好的文章,充实下自己。目前已经更新两个版本,昨晚上提交了第三个版本,应该明天就可以审核过了,有兴趣的可以看下,如果希望一同开发的,也可以私聊我。

    相关文章

      网友评论

        本文标题:UISearchController 自定义高度的坑

        本文链接:https://www.haomeiwen.com/subject/xryxattx.html