我有一个表格视图,我希望能够搜索.我知道如何做到这一点,但有没有一种方法,我可以有一个条形按钮项目,扩展到我的表格视图标题内的搜索栏(具有一定宽度)?例如,我可以在swift中制作类似下面的内容吗?
这是一个有效的例子:
class ExpandableView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .green
translatesAutoresizingMaskIntoConstraints = false
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override var intrinsicContentSize: CGSize {
return UILayoutFittingExpandedSize
}
}
class ViewController: UIViewController {
var leftConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
assert(navigationController != nil, "This view controller MUST be embedded in a navigation controller.")
// Expandable area.
let expandableView = ExpandableView()
navigationItem.titleView = expandableView
// Search button.
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(toggle))
// Search bar.
let searchBar = UISearchBar()
searchBar.translatesAutoresizingMaskIntoConstraints = false
expandableView.addSubview(searchBar)
leftConstraint = searchBar.leftAnchor.constraint(equalTo: expandableView.leftAnchor)
leftConstraint.isActive = false
searchBar.rightAnchor.constraint(equalTo: expandableView.rightAnchor).isActive = true
searchBar.topAnchor.constraint(equalTo: expandableView.topAnchor).isActive = true
searchBar.bottomAnchor.constraint(equalTo: expandableView.bottomAnchor).isActive = true
}
@objc func toggle() {
let isOpen = leftConstraint.isActive == true
// Inactivating the left constraint closes the expandable header.
leftConstraint.isActive = isOpen ? false : true
// Animate change to visible.
UIView.animate(withDuration: 1, animations: {
self.navigationItem.titleView?.alpha = isOpen ? 0 : 1
self.navigationItem.titleView?.layoutIfNeeded()
})
}
}
Run Code Online (Sandbox Code Playgroud)