2017-09-11 14 views
3

우리는 명시된 특정 UIViewControllerUISearchControllerUISearchController.hidesNavigationBarDuringPresentation는 우리의 프로젝트에

hidesNavigationBarDuringPresentation = false 

. searchController에는 범위 제목 배열이 있습니다. 이것은 지금까지 iOS 10까지는 잘 작동하지만, iOS 11 베타에서는 hidesNavigationBarDuringPresentation의 잘못된 설정이 무시되어 우리의 디스플레이가 엉망이됩니다. 프로젝트의 다른 요소로 인한 것이 아닌지 확인하기 위해 단일 UITableViewController으로 구성된 베어 본 테스트 프로젝트를 만들었습니다. UISearchController을 다른 간단한 UITableViewController으로 초기화했습니다. scopeButtonTitles을 할당 마지막 줄이 존재하지 않을 때

self.title = "Search Bar Scope Test" 
    let searchViewController = SearchViewController(style: .plain) 
    searchController = UISearchController(searchResultsController: searchViewController) 
    searchController!.searchBar.sizeToFit() 
    tableView.tableHeaderView = searchController!.searchBar 
    searchController?.hidesNavigationBarDuringPresentation = false 

    searchController?.searchBar.scopeButtonTitles = ["scope 1", "scope 2", "scope 3", "scope 4", "scope 5"] 

가 탐색 모음 숨겨진하지 않았고 검색 창은 원래 위치에 남아 : 다음 코드는 기본보기 컨트롤러의 viewDidLoad() 방법입니다. 그러나 해당 줄이 있으면 NavigationBar이 숨겨지고 searchBar과 범위 단추가 모두 iPhone 및 iPad에서 세로 모드로 위로 이동하지만 범위 단추가 많고 맞지 않을지라도 가로 모드로 동일하게 유지됩니다 한 줄에).

다른 사람이이 문제가 발생 했습니까? 이것은 iOS 11에서 버그 또는 예상되는 동작 (물론 우리가 원하는 동작이 아님)이며 해결 방법이 있습니까?

감사합니다.

+0

스코프 버튼에 문제가 없지만 전체 검색 막대가 테이블보기에서 튀어 나와 화면 상단에 연결됩니다. Xcode 9 GM 사용. –

+0

@ChrisPaveglio 마침내 문제의 원인을 발견했습니다. 아래 내 대답을 참조하십시오. – CodePlumber

+0

고마워요. 그렇지만 제 문제는 아닙니다. 알아내는 데 더 많은 시간이 필요해. 나는 더 독특하다고 생각해. 나는 2 개의 테이블 뷰가 나란히있는 iPad 레이아웃을 가지고 있고 1 개는 검색 창을 가지고 있으며 결코 테이블 뷰를 놓아서는 안됩니다. 나는 내가 더 멀리 가기 전에 몇 가지 것을 리팩터링 할 필요가 있다고 생각한다. –

답변

3

확인을 클릭하면 searchBar 및 범위 버튼이 iOS 11에서 잘못 정렬 된 문제를 발견했습니다. 중요한 점은 searchController 구성 체계가 searchBar 인 iOS 11에서 변경되었습니다. 아래 그림과 같이 더 이상 headerView는 대신, 전체 searchController가 navigationItem의 일부가되어야 tableView's으로 제시되어서는 안 :

if #available(iOS 11.0, *) { 
    self.navigationItem.searchController = searchController 
    // optional, but apparently due to a bug in iOS 11, 
    // the searchBar and the scope buttons may get too high and mis-aligned 
    // when the nav bar is hidden 
    searchController?.hidesNavigationBarDuringPresentation = false 
} else { 
    tableView.tableHeaderView = searchController!.searchBar 
} 

나는 아이폰 OS 11 UISearchBar에 관한 한 몇 가지 UI 문제 해결 위의 코드, this WWDC 2017 video에서 실제로 권장됩니다. 그러나 Xcode cou 오래된 tableHeaderView 지정 라인에서 우리에게 경고를 주었을 것이다. 아마도 나를 구했을 것이며, 아마도 다른 개발자들의 혼란과 연구 시간을 절약 해 주었을 것이다.