簡體   English   中英

如何在navigationBar(UITableView)swift下添加SearchController.searchBar

[英]How to add SearchController.searchBar under navigationBar (UITableView) swift

我嘗試在導航欄下添加SearchController.searchBar。

override func viewDidLoad() {
        super.viewDidLoad()
        searchController = UISearchController(searchResultsController: nil)
        searchController.searchResultsUpdater = self
        searchController.searchBar.sizeToFit()
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.delegate = self
        searchController.dimsBackgroundDuringPresentation = false //
        searchController.searchBar.delegate = self
        let SearchFrame = CGRectMake(0,(self.navigationController?.navigationBar.frame.height)!, (self.navigationController?.navigationBar.frame.width)!,searchController.searchBar.frame.height)
        searchController.searchBar.frame = SearchFrame
        self.navigationController?.navigationBar.addSubview(searchController.searchBar)
}

此代碼在navigationBar下添加了searchBar,但searchBar無法檢測到用戶交互! 我無法點擊搜索文字輸入字段!! 我做錯了什么?

嘗試這個。 這個對我有用

    var SearchFrame : CGRect?
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let searchController = UISearchController(searchResultsController: nil)
        searchController.searchResultsUpdater = self
        searchController.searchBar.sizeToFit()
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.delegate = self
        searchController.dimsBackgroundDuringPresentation = false //
        searchController.searchBar.delegate = self
        SearchFrame = CGRectMake(0,(self.navigationController?.navigationBar.frame.height)!, (self.navigationController?.navigationBar.frame.width)!,searchController.searchBar.frame.height)
        searchController.searchBar.frame = SearchFrame!
        self.navigationController?.navigationBar.addSubview(searchController.searchBar)


    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        var navbarFrame = self.navigationController!.navigationBar.frame
        navbarFrame.size = CGSize(width: navbarFrame.width, height: navbarFrame.height + SearchFrame!.height)
        self.navigationController?.navigationBar.frame = navbarFrame
    }

我的問題解決了!

首先,我們需要使用類創建一個XIB文件,並為它們添加兩個navigationBar! 然后需要添加一個IBOutlets! xib中的兩個導航欄!

然后編寫代碼:

var TitleNavigationBar = UINavigationBar() //This need to add Title and Subtitle to NavigationBarTitleView

override func viewDidLoad() {
        super.viewDidLoad()
        let NavBarWithSearch = NSBundle.mainBundle().loadNibNamed("NavBarWithSearchBar", owner: self, options: nil)[0] as! NavBarWithSearchBar
        self.navigationController?.navigationBar.frame = CGRectMake((self.navigationController?.navigationBar.frame.origin.x)!, 0.0, (self.navigationController?.navigationBar.frame.width)!, (self.navigationController?.navigationBar.frame.height)! +          self.searchController.searchBar.frame.height)
        NavBarWithSearch.frame = CGRectMake(0.0,0.0, (self.navigationController?.navigationBar.frame.width)!, (self.navigationController?.navigationBar.frame.height)!)
        NavBarWithSearch.NavigationBarForSearchBar.topItem?.titleView = searchController.searchBar
        TitleNavigationBar = NavBarWithSearch.CustomNavigationBar //=======This need to add Title and Subtitle to NavigationBarTitleView`
        self.navigationController?.navigationBar.addSubview(NavBarWithSearch)
        self.automaticallyAdjustsScrollViewInsets = false
        tableView.contentInset = UIEdgeInsetsMake((self.navigationController?.navigationBar.frame.height)! + UIApplication.sharedApplication().statusBarFrame.height, 0, (self.tabBarController?.tabBar.frame.height)!, 0)
        searchController.hidesNavigationBarDuringPresentation = false
}
override func viewWillAppear(animated: Bool) {

        //This need to add Title and Subtitle to NavigationBarTitleView
        let titleView = NSBundle.mainBundle().loadNibNamed("NavTitleView", owner: self, options: nil)[0] as! NavTitleView
        titleView.TitleLabel.text = "Title"
        titleView.contentMode = UIViewContentMode.ScaleAspectFit
        titleView.SubtitleLabel.text = "SubTitle"
        let TitleViewFrame = CGRectMake((UIScreen.mainScreen().bounds.width/2) - 80, 0, 160, 44)
        titleView.frame = TitleViewFrame
        TitleNavigationBar.topItem?.titleView = titleView
        //========This need to add Title and Subtitle to NavigationBarTitleView
        self.navigationController?.navigationBar.frame = CGRectMake((self.navigationController?.navigationBar.frame.origin.x)!, 20, (self.navigationController?.navigationBar.frame.width)!, (self.navigationController?.navigationBar.frame.height)! + self.searchController.searchBar.frame.height)

}

帶有字幕的NavBarTitleView類的XIB文件應該如下所示: 標題和子標題

最后我得到了帶搜索欄的漂亮導航欄!

帶搜索欄文本輸入的導航欄

PS searchController.hidesNavigationBarDuringPresentation = true //這不起作用,因為自定義導航欄作為子視圖添加到主導航欄!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM