UITableView는 셀에서 segue에 대해 "Hide Bottom Bar on Push"가 true 일 때 SearchBar를 표시하는 맨 위로 이동합니다.

xxtesaxx

설명 할 수없는 문제가 발생하여 올바른 방향으로 안내하거나 적절한 솔루션을 제공 할 수 있기를 바랍니다.

사용자 지정 프로토 타입 UITableViewCell을 사용하여 UINavigationController에 포함 된 UITableViewController가 있습니다. 스토리 보드에서 스택에 디테일 뷰 컨트롤러를 표시 (푸시)하기 위해 Segue를 추가했습니다. 이것은 잘 작동하며 지금까지 예상치 못한 것은 없습니다.

그러나 디테일 뷰 컨트롤러에서 뒤로 버튼을 누르면 UITableViewController로 돌아가지만 이번에는 TableView가 맨 위로 이동하여 SearchBar를 넣은 TableViews HeaderView를 표시합니다.

이것은 디테일 뷰 컨트롤러 에서 " Hide Bottom Bar on Push "를 체크했을 때 발생 합니다. 디테일 뷰 컨트롤러가 NavigationController를 내장 한 UITabBarController에서 탭 바를 숨기도록해야합니다.

내 계층 구조는 다음과 같습니다.

-UITabBarController
--UINavigationController
---UITableViewController (my table view controller)
--(more view controllers for other tabs)

이상한 점은 이것이 즉시 발생하지 않는다는 것입니다. 돌아 가면 처음에는 모든 것이 좋아 보이지만 아주 짧은 시간 후에 실제로 테이블 뷰의 맨 위로 이동합니다.

뒤로 버튼을 누른 후 테이블 뷰 contentOffset 등을 기록했습니다.

T0.000: viewDidLayoutSubviews => -20 
T0.011: viewWillAppear => 44
T0.023: viewDidLayoutSubviews => -20 
T0.530: viewDidAppear => -20 (correct value, same as before the push)
T0.540: viewDidLayoutSubviews => -64 (wrong value, showing search bar)

약 0.5 초 후에는 어떻게됩니까? 왜 갑자기 정상으로 점프합니까? 나는 혼자서 오프셋을 설정하지 않았습니다. 어떻게 든 시스템에 의해 자동으로 수행되며 상세보기 컨트롤러에서 "Hide Bottom Bar on Push"를 선택 취소하면 동작이 예상대로 작동합니다. 이전에 검색 표시 줄이 표시 되었으면, 나중에 표시되고 이전에는 숨겨졌지만 여전히 이후에는 숨겨졌습니다.

xxtesaxx

글쎄, 나는 이것을 고치는 방법을 찾지 못했지만 적어도 점프를 멈추는 해결 방법을 찾았습니다. 다른 앱에서 동일한 문제를 발견했으며 애플도 앱 시작시 검색 창을 더 이상 숨기지 않습니다. 이 문제 때문에 누가 알겠습니까? 그래서 여기 내 해결책이 있습니다.

첫째,이 문제는 테이블 뷰에 전체 화면을 채우는 데 필요한 것보다 적은 셀이있는 경우에만 발생합니다. 화면에 맞출 수있는 것보다 더 많은 셀이 생기면 세부 정보보기로 이동 한 다음 마스터보기로 돌아간 후 테이블보기가 점프하지 않고 동일한 위치에 유지됩니다.

이 지식으로 해결 방법을 만들 수있었습니다. 내 해결 방법은 다소 간단합니다. segues를 사용하여 내 앱의 다양한 부분을 표시하므로 "master"인 UITableViewController에서 prepare (for segue : sender :)에서 세부 정보보기를 표시하기 전에 테이블보기의 첫 번째 셀이 표시되는지 확인합니다. . 그렇다면 테이블 뷰를 스크롤하여 검색 창을 표시합니다.

if let firstCell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) {
    if tableView.visibleCells.contains(firstCell) && !searchController.isActive {
        let offset = CGPoint(x: 0, y: -tableView.contentInset.top)
        tableView.setContentOffset(offset, animated: true)
    }
}

셀 중 하나를 클릭하면 항목의 세부 정보를 보여주는 segue가 수행됩니다. 첫 번째 셀이 표시되면 tableview를 약간 아래로 스크롤하여 검색 창을 표시합니다.

더 나은 접근 방식은 실제로 화면에 들어갈 수있는 셀 수와 총 셀 수를 계산하는 것이므로 셀이 충분하지 않을 때만 검색 창을 표시하지만이 솔루션이 나에게 충분하다는 것을 알았습니다. 점프를 방지합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관