[ios] iOS 11에서 스크롤하지 않고 탐색 막대에 검색 막대 표시

navigationItem.searchControlleriOS 11의 UITableViewController 속성에 UISearchController를 연결하고 있습니다 . 이것은 잘 작동합니다. 멋진 iOS 11 스타일의 검색 창을 사용할 수 있습니다.

그러나 시작시 검색 표시 줄을 표시하고 싶습니다. 기본적으로 사용자는 검색 창을 보려면 테이블보기에서 위로 스크롤해야합니다. 이것이 어떻게 가능한지 아는 사람이 있습니까?

여기에 이미지 설명 입력
여기에 이미지 설명 입력

왼쪽 : 출시 후 기본 상황. 오른쪽 : 검색 표시 줄이 표시됩니다 (위로 스크롤). 오른쪽 스크린 샷과 같이 시작 후 검색 표시 줄을 표시하고 싶습니다.

hidesSearchBarWhenScrolling내 탐색 항목 의 속성 을 false 로 설정하여 검색 창을 표시 할 수 있음을 이미 발견했습니다 . 그러나 이렇게하면 아래로 스크롤해도 검색 표시 줄이 항상 표시됩니다. 이것은 제가 원하는 것이 아닙니다.



답변

다음은 검색 창을 처음에 표시 한 다음 스크롤 할 때 숨길 수 있도록합니다.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = false
    }
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = true
    }
}

를 사용하면 isActive내가 원하는 작업을 수행하지 않고 검색 창을 활성화 (취소 버튼 표시 등) 할 수 있습니다.


답변

에 searchController를 추가 한 후 속성 isActive을로 설정할 수 있습니다 .truenavigationItem

다음과 같이 :

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    searchController.isActive = true
}


답변

나를 위해 viewDidLoad()방법에 다음 줄을 추가 한 후에 작동했습니다 .

navigationController?.navigationBar.prefersLargeTitles = true
navigationController!.navigationBar.sizeToFit()


답변

iOS 13에서는 @Jordan Wood의 답변이 작동하지 않았습니다. 대신 나는했다 :

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    UIView.performWithoutAnimation {
        searchController.isActive = true
        searchController.isActive = false
    }
}


답변