美文网首页
iOS11上SearchBar居中

iOS11上SearchBar居中

作者: 神SKY | 来源:发表于2017-10-20 15:16 被阅读1602次

    当系统升级到iOS11及以上版本时,我们会发现原先设置在searchBar中间的placeholder和图片会往左边移(没任何设置的效果),在这里小编附上了解决的办法,希望大家能够得到参考。
    效果如下图:


    如何实现

    1.加入searchBar控件

    小编在这里用的是storyboard,若与小编一样是用storyboard或者XIB的,记得千万要设置placeholder。

    2.设置searchBar

    在这里可以根据自己的需要设置一下searchBar样式

    //        searchBar的外观设置
            searchBar.layer.masksToBounds = true;
            searchBar.layer.cornerRadius = searchBar.frame.size.height / 2;
            searchBar.layer.borderWidth = 1;
            searchBar.contentMode = .center;
            searchBar.layer.borderColor = UIColor.init(red: 197/255.0, green: 199/255.0, blue: 200/255.0, alpha: 1).cgColor;
    //        searchBar弹出的键盘类型设置
            searchBar.returnKeyType = UIReturnKeyType.done;
    
    3.searchBar中textField的设置
    //        searchBar中的textField设置
            let searchField = searchBar.value(forKey: "_searchField") as! UITextField;
            searchField.setValue(UIFont.systemFont(ofSize: 10), forKeyPath: "_placeholderLabel.font");
            searchField.setValue(UIColor.init(red: 70/255.0, green: 70/255.0, blue: 70/255.0, alpha: 1), forKeyPath: "_placeholderLabel.textColor");
    
    4.获取系统版本号
    //    当前IOS系统版本
        var currentVersion: Int!
    ------------------------------
    //        获取系统版本号
            let sysVersion = UIDevice.current.systemVersion
            currentVersion = Int(sysVersion.components(separatedBy: ".").first!)
    
    5.根据系统版本号判断操作
    let space = 50;//搜索框图片加上图片和字体之间的距离
    ----------------------------------------
    //        判断是不是大于IOS 11
            if currentVersion! < 11 {
                searchField.attributedPlaceholder = NSAttributedString.init(string: "SEARCH", attributes: [NSAttributedStringKey.baselineOffset:-2]);
            }else
            {
    //            searchBar中textField的placeholder的宽度可以获取
    //            let label = UILabel.init()
    //            label.text = "SEARCH"
    //            label.font = UIFont.systemFont(ofSize: 10)
    //            label.sizeToFit()
    //            print(label.frame.width)
    //            获取当前屏幕宽度
                self.view.frame.size.width = UIScreen.main.bounds.size.width
    //            重新布局
                self.view.layoutSubviews()
    //            计算偏移量:偏移量 =(searchBar的宽度-label宽度-搜索框图片加上图片和字体之间的宽度)/ 2
                searchBar.setPositionAdjustment(UIOffsetMake((searchBar.frame.size.width - 40.5 - 50 ) / 2 , 0), for: UISearchBarIcon.search)
            }
    
    6.在searchBar的代理中进行判断
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    //        输入时需要进行的操作
        }
        func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
            if currentVersion >= 11 {
                self.searchBar.setPositionAdjustment(UIOffset.zero, for: UISearchBarIcon.search)
            }
            return true
        }
        func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
            if currentVersion >= 11 {
                searchBar.setPositionAdjustment(UIOffsetMake((searchBar.frame.size.width - 40.5 - 50 ) / 2 , 0), for: UISearchBarIcon.search)
            }
            return true
        }
        func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    //        输入完成时,点击按钮需要进行的操作
            searchBar.resignFirstResponder()
        }
    
    7.最后,加上点击空白处关闭键盘就完成了
    //        使键盘点击空白处关闭
            let tap = UITapGestureRecognizer.init(target: self, action: #selector(viewTapped(tap:)));
            tap.cancelsTouchesInView = false;
            self.view.addGestureRecognizer(tap);
        }
        @objc func viewTapped(tap: UITapGestureRecognizer) {
            searchBar.resignFirstResponder()
        }
    

    最后,希望这篇文章对各位看官们有所帮助。Demo下载地址:Demo

    相关文章

      网友评论

          本文标题:iOS11上SearchBar居中

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