2017-02-27 5 views
0

사용자 정의 UISearchBar을 사용자 정의 으로 네비게이션 컨트롤러의 제목으로 사용자 정의 했으므로 하위보기 컨트롤러 변경 사항 전체에 지속 검색 막대 컨트롤이 표시되고,show segue에서 제목으로 돌아갈 때 UISearchBar가 잠시 회색 배경을 표시합니다.

사용자가 자식 테이블 뷰 컨트롤러에 표시되는 검색 결과를 도청 그러나 http://imgur.com/a/IikEw

는, 탐색 제목은 다음과 같습니다 내 갤러리의 첫 번째 이미지 (아직 이미지를 게시하는 것만으로는 충분하지 평판)에 표시되는 텍스트 문자열로 바뀌어 내 ​​갤러리의 두 번째 이미지처럼 보입니다.

잠시 동안 검색 창에 내 갤러리의 세 번째 이미지처럼 보이는 밝은 회색 배경이 있기 때문에 검색 결과를 표시하는 테이블보기로 다시 이동하면 문제가 발생합니다.

시뮬레이터의 애니메이션 속도를 느리게 할 때 디버그 뷰 계층 구조를 Xcode에 입력하여 문제가되는 요소가 무엇인지 알 수 있습니다. 문제의 요소는 "UISearchBarBackground"라는 UIImageView가 될 때까지만 존재합니다 내 갤러리의 네 번째 이미지에서 볼 수 있듯이 전환 애니메이션이 끝나고 색상이 원하는 결과로 다시 돌아옵니다. 초기화 내 UISearchController의 속성을 설정 초기 뷰 컨트롤러에서

, I했습니다 viewDidLoad의 검색 바의 다음 속성을 설정합니다

let controller = CustomSearchController(searchResultsController: self.searchResultsController) 
controller.searchBar.backgroundColor = UIColor.clear 
controller.searchBar.backgroundImage = nil 

... 그리고 나는이 사용자 정의 클래스를 가지고,

class CustomSearchBar: UISearchBar { 

    override func setShowsCancelButton(_ showsCancelButton: Bool, animated: Bool) { 
    super.setShowsCancelButton(false, animated: false) 

    } 
} 

class CustomSearchController: UISearchController { 

    lazy var _searchBar: CustomSearchBar = { 
    [unowned self] in 

     let customSearchBar = CustomSearchBar(frame: CGRect.zero)   
     return customSearchBar 

    }() 

    override var searchBar: UISearchBar { 
     get { 
     return _searchBar 
     } 
    } 
} 
지금까지 내가 이해할 수

, 어떤 시점에서 내 사용자 지정 검색 컨트롤러 deinitial입니다 : 내가 위임 문 제거를 유지하지 않습니다 검색 컨트롤러의 취소 버튼을 제거 할 수 있도록 내가 구현하는 크기가 조정되고 한 번만 초기화되므로 설정이 적용되기 전에 일시적으로 회색 배경의 보이는보기가 배치되는 드로잉주기 때문에 문제가 나타나고있는 것처럼 느껴집니다.

정확히 무슨 일이 벌어지고 있는지, 그리고 어떻게이 문제를 해결할 수 있는지에 관해서는 많은 상실감이 있습니다. 나는 단순한 무언가를 간과하고 있는지, 아니면 문제를 해결하기 위해 커스텀 트랜지션 객체를 생성해야하는지 궁금하다. 저는 iOS 아키텍처와 Swift를 사용하는 중급 수준이지만 항상 더 많은 것을 배우고 있습니다.

+0

색조를 배경색이 아닌 .clear로 설정하십시오. –

+0

'controller.searchBar.tintColor'를'UIColor.clear' 또는 다른 색상으로 설정하면 아무런 차이가 없습니다. 내 문제를 해결하려면'controller .searchBar.barTintColor'를 내 메인 탐색과 동일한 녹색으로 설정합니다 ('barTintColor'를'UIColor.clear '로 설정하면 segue 전환 애니메이션 중에 검은 색 배경이됩니다). –

답변

1

이 문제는 선택 사항 인 barTintColor 속성을 UISearchBar으로 설정하지 않아서 발생했습니다. 전환 애니메이션 중에 속성이 nil 인 경우 애니메이션이 끝날 때까지 밝은 회색으로 표시됩니다. 이 문제를 해결하기 위해 controller.searchBar.barTintColor = UIColor(red: 76/255, green: 203/255, blue: 124/255, alpha: 1)을 설정하고 이제 의도 한 결과를 얻고 있습니다.