如何在自定义TitleView的子视图上添加子视图

时间:2019-02-13 06:34:07

标签: ios swift uinavigationbar

我将自定义视图设置为UINavigationBar的titleView。 当我只设置带有框架的视图时,效果很好。

但是,如果我在设置为标题视图的视图中添加任何子视图,则该子视图不会出现。


添加到titleView的视图

class NavigationBarSearchBar: UIView {

    let view: UIView = {
        let v = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
        v.translatesAutoresizingMaskIntoConstraints = false
        return v
    }()


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

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


    private func setupSubviews() {

        addSubview( view )
        [
        view.widthAnchor.constraint(equalToConstant: 20),
        view.heightAnchor.constraint(equalToConstant: 20),
        view.centerYAnchor.constraint(equalTo: centerYAnchor),
        view.centerXAnchor.constraint(equalTo: centerXAnchor)
        ].forEach { $0.isActive = true }
    }
}


View Controller上的声明

private lazy var searchBar: UIView = {
        let sb = NavigationBarSearchBar(frame: CGRect(x: 0, y: 0, width: CGFloat.greatestFiniteMagnitude, height: 40))
        return sb
    }()


将自定义视图设置为导航栏

navigationItem.titleView = searchBar

2 个答案:

答案 0 :(得分:2)

lazy   var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))
searchBar.sizeToFit()
navigationItem.titleView = searchBar

答案 1 :(得分:0)

使用框架创建视图并添加到navigationItem

var viewTitle = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 30))
viewTitle.backgroundColor = UIColor.red
navigationItem?.titleView = viewTitle