输入内容时,UISearchBar的文字会移至最后?

时间:2018-02-06 11:02:56

标签: ios swift uisearchbar

我自定义了 UISearchbar ,代码如下:

class CustomSearchBar: UIView {

lazy var searchBar: MySearchBar = {
    let search = MySearchBar()
    search.tintColor = UIColor.orange
    search.barTintColor = UIColor.yellow
    search.searchBarStyle = .minimal
    search.searchTextPositionAdjustment = UIOffset(horizontal: 10, vertical: 0)
    return search
}()
lazy var cancelButton: UIButton = {
    let button = UIButton(type: .custom)
    button.setTitle("取消", for: .normal)
    button.setTitleColor(UIColor.black, for: .normal)
    return button
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    setupUI()
    setupConstraints()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

private func setupUI() {
    addSubview(searchBar)
    addSubview(cancelButton)
}

private func setupConstraints() {
    searchBar.snp.makeConstraints { (make) in
        make.left.equalToSuperview().offset(20)
        make.top.equalToSuperview().offset(6)
        make.height.equalTo(32)
        make.width.equalToSuperview().offset(-80)
    }
    cancelButton.snp.makeConstraints { (make) in
        make.left.equalTo(searchBar.snp.right).offset(13)
        make.centerY.equalTo(searchBar)
    }
}
}

class MySearchBar: UISearchBar {

override init(frame: CGRect) {
    super.init(frame: frame)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func indexOfSearchFieldInSubviews() -> Int! {
    var index: Int!
    let searchBarView = subviews[0]
    for (i, view) in searchBarView.subviews.enumerated() {
        if view.isKind(of: UITextField.self) {
            index = i
            break
        }
    }
    return index
}

override func draw(_ rect: CGRect) {
    if let index = indexOfSearchFieldInSubviews() {
        let searchField: UITextField = subviews[0].subviews[index] as! UITextField
        searchField.leftView = UIImageView(image: UIImage(named: "Search_icon"))
        searchField.font = UIFont.systemFont(ofSize: 14)
        searchField.borderStyle = .none
        searchField.layer.masksToBounds = true
        searchField.layer.cornerRadius = 4
        searchField.backgroundColor = barTintColor
        searchField.contentVerticalAlignment = .center
        searchField.placeholder = "input something"
    }
 }
}

我们可以看到它非常简单。刚刚添加了 searchBar cancelButton 。 然后我将其作为 subView 添加到 navigationBar ,将其变为viewController中的firstFirstResponder。

 class ViewController: UIViewController {
   lazy var customeSearchBar = CustomSearchBar()

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.addSubview(customeSearchBar)
    customeSearchBar.snp.makeConstraints { (make) in
        make.left.right.equalToSuperview()
        make.centerY.equalToSuperview()
        make.height.equalTo(44)
    }
    customeSearchBar.searchBar.becomeFirstResponder()
  }

}

首先,我输入的内容还可以。

enter image description here

当我继续输入内容时,问题就出现了:

enter image description here

看起来内容移到了最底层。我试图找到解决问题的方法。但我没有得到它。 在模拟和一些iPhone中工作正常是一件奇怪的事情。但我的一部手机出错了。

0 个答案:

没有答案