2016-08-14 2 views
3

버튼이있는 UIStackView에 UISearchBar가 있으며, 일종의 탐색 막대가 있습니다. 가 될 때 첫 번째로 반응 UISearchBar의 폭이 0로 이동 enter image description here , 그것은 다음과 같습니다 : 지금 내가 가지고있는 유일한 제약은 오른쪽에있는 UIButton의 폭이다첫 번째 응답자가 된 후 내 UISearchBar의 너비가 0 인 이유는 무엇입니까?

enter image description here는 다음과 같이 정상적으로 모습입니다 44pt이고 전체 스택보기가 화면의 상단과 측면에 고정되어 있습니다. 콘솔의 출력 내용은 다음과 같습니다. enter image description here

저는 NSLayoutConstraint에 능통하지는 않지만 명확하게 무언가가 버튼의 44pt 너비 제약 조건과 충돌합니다. UISearchbar의 너비가 0이되는 이유는 무엇입니까? 내가 NSLayoutConstraint 매우 유창 모르겠지만 분명 뭔가 버튼의 44pt 너비 제약와 충돌 enter image description here

+0

로그 전체를 게시해야합니다 (시스템에서 어떤 제약 조건이 깨 졌는지 알려주는 부분). 또한 ** 로그를 텍스트 ** (코드)로 게시하십시오. – paulvs

+0

* 전체 스택보기가 화면 상단과 측면에 고정되어 있습니다. * 좋아요.하지만 StackView를 완전히 제한하지는 않습니다. 바닥은 어때? – 7stud

+1

또한 출력 이미지를 게시하는 이유는 무엇입니까? Mac의 복사/붙여 넣기 기능을 사용할 수 없습니까? 반면 스토리 보드의 목차 이미지를 보는 것이 좋을 것입니다. – 7stud

답변

0

: 요청에 따라

override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) { 
    if presentationStyle == .expanded { 
     searchController.searchBar.becomeFirstResponder() 
     searchController.searchBar.tintColor = UIColor.white 
    } 
} 

func didDismissSearchController(_ searchController: UISearchController) { 
    requestPresentationStyle(.compact) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    configureSearchController() 
} 

func configureSearchController() { 
    searchController = UISearchController(searchResultsController: nil) 
    searchController.dimsBackgroundDuringPresentation = false 
    searchController.searchBar.placeholder = "Search here..." 
    searchController.searchBar.sizeToFit() 
    searchController.searchBar.isTranslucent = false 
    searchController.searchBar.delegate = self 
    searchController.delegate = self 
    searchController.searchBar.barTintColor = addButton.backgroundColor 
    stackView.insertArrangedSubview(searchController.searchBar, at: 0) 
    //This removes the hairline 
    let color = addButton.backgroundColor 
    searchController.searchBar.layer.borderWidth = 1 
    searchController.searchBar.layer.borderColor = color?.cgColor 

} 

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { 
    if presentationStyle == .expanded { 
     return true 
    } else { 
     requestPresentationStyle(.expanded) 
     return false 
    } 
} 

내 스토리 보드 : 여기에

내 코드입니다 . UISearchbar의 너비가 0이되는 이유는 무엇입니까?

버튼의 선행 가장자리에 대한 출력이 분명히 있지만 버튼의 너비 만 제한한다고합니다. 출력 결과에 따르면 버튼의 앞쪽 가장자리를 스택보기의 앞쪽 가장자리로 제한했습니다.

단추의 앞쪽 가장자리를 스택보기의 앞쪽 가장자리로 제한하고 단추가 검색 막대 왼쪽에 있으면 단추를 넓게 만들 수 있습니다. 그러나 검색 막대의 오른쪽에 단추가 있기 때문에 단추는 너비가 44이거나 스택보기의 선행 가장자리로 제한 될 수 있지만 둘 다 제한 될 수는 없습니다.

그래서 iOS는 너비 제약 조건을 깨고 스택보기의 선행 가장자리와 정렬되도록 버튼을 왼쪽으로 확장합니다.

그 결과가 아니어도됩니다. Apple이 버튼을 드래그 한 위치를 무시하고 제약 조건을 따르도록 Xcode를 프로그래밍 할 수 있다고 상상해보십시오. 즉, 버튼을 이동 시켜서 선행 가장자리와 스택보기의 선행 가장자리가 위로오고 버튼의 너비가 44가되도록하십시오. 버튼 오른쪽으로 검색 막대를 이동합니다. 그러나 분명히 애플은 수평 스택보기에서 항목의 순서를 더 강하게 우선 순위를 부여했습니다. 즉, 검색 막대의 오른쪽에 단추를 놓았 기 때문에, 즉 그것이 남아있는 곳입니다.

+0

버튼에 선행 제약 조건이 없습니다. 또한, 첫 번째 응답자가 시작될 때 왜 잘못되는 것입니까? –

+0

다음은 어떻게 설정했는지입니다. 스토리 보드에서 UISearchController의 검색 창을 나타낼 수 없으므로이를 프로그래밍 방식으로 추가해야합니다. 그래서 내 버튼의 너비 제약은 44이지만 스택보기는 채워지도록 설정되어 있습니다. 그래서 네, 스토리 보드에는 상충되는 제약이 있습니다. 그러나이 충돌은 코드의 스택 뷰에 UISearchBar를 추가 할 때 해결됩니다. 결과는 그림 1입니다. 그러나 검색 막대가 첫 번째 응답자가 될 때 (그림 2) 어떤 이유로 인해 너비가 0이되고 충돌 조건이 발생합니다. 검색 창이 올바른 크기라면 문제가 없습니다. –