标题中的Swift可扩展搜索栏?

Mik*_*idt 3 xcode ios swift

我有一个表格视图,我希望能够搜索.我知道如何做到这一点,但有没有一种方法,我可以有一个条形按钮项目,扩展到我的表格视图标题内的搜索栏(具有一定宽度)?例如,我可以在swift中制作类似下面的内容吗?

可扩展的搜索栏

pau*_*lvs 6

这是一个有效的例子:

在此输入图像描述

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)