2016-06-04 7 views
3

탐색 모음 아래에 SearchController.searchBar를 추가하려고합니다.navigationBar (UITableView)에서 SearchController.searchBar를 추가하는 방법 swift

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) 
} 

이 코드는 탐색 모음 아래에 검색 막대를 추가하지만 검색 표시 줄은 사용자 상호 작용을 감지 할 수 없습니다. 검색 텍스트 입력란을 클릭 할 수 없습니다! 나는 무엇을 잘못 했는가?

+0

일부 디버깅을 시도해 보겠습니다. 'self.navigationController? .navigationBar.clipsToBounds = true' ->'UISearchBar'가 사라지면 탐색 바의 높이를 변경하지 않았다는 의미입니다. –

+0

@ noir_eagle 예, 내 UISearchBar가이 경우 사라집니다! 내가해야 할 일? – Dmitry

답변

0

내 문제가 해결되었습니다!

먼저 클래스가있는 XIB 파일을 만들고 두 개의 navigationBar를 추가해야합니다. 그런 다음 IBOutlets를 추가해야합니다!

Two navigation bar in xib! 그런 다음 코드를 작성 : 자막과 NavBarTitleView위한 클래스와

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) 

} 

XIB 파일은 다음과 같은 과 같이해야합니다 Title and SubTitle

마지막으로 내가 검색 창에 아름다운 탐색 막대를 얻을!

Navbar with search bar text input

P.S. searchController.hidesNavigationBarDuringPresentation = true // 사용자 정의 탐색 막대가 기본 탐색 막대에 하위보기로 추가 되었기 때문에이 작업이 수행되지 않습니다!

+0

낙타가 아닌 협약을 무시하고 이것이 얼마나 나쁜지를 표현할 수는 없습니다. – TheCodingArt

+0

@TheCodingArt, 이해합니다 ...하지만 다른 해결책을 찾을 수 없습니다! – Dmitry

+0

나는 방금 오늘 그것을했다. ... navbar의 아래의보기를 더했고, 2를 함께 섞었고, 그것의 아래에서 그것에서 테이블 VC와 같은 아이 VC를 가지고 있었다. ... 다시 위의 노트로서, 당신은 결코 품지 마라. 변수 및/또는 메소드/함수 이름은 대문자로 시작합니다. – TheCodingArt

0

시도해보십시오. 그것은 나를 위해 작동

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 
    } 
+0

이 경우 leftBarButton TitleView 및 rightBar 버튼이 검색 창 아래에 있습니다! 그것을 고치는 방법? – Dmitry

+0

음, navigationItem의 속성을 설정하는 대신 고정 된 프레임을 가진 하위 뷰로이를 추가해야합니다. –

+0

도와 주셔서 감사합니다. – Dmitry

관련 문제