UINaviationBar를 스크롤하여 표시하거나 숨기는 방법[TableView][라이브러리 없음]

7514 단어 iOSSwifttableView

조건(대상)


·tableView를 통해 일람표에서 상세한 내용으로 옮길 수 있다
• 일람에서 아래로 스크롤할 때 NavigationBar를 숨기거나 위로 스크롤할 때 NavigationBar 표시
· 자세한 내용은 NagigationBar를 숨기지 않습니다
· 자세한 내용에서 일람을 되돌릴 때 NavigationBar의 표시/숨김 상태를 유지합니다

배경.


http://animane.hatenablog.com/entry/2016/02/04/144458
라이브러리
일단 프로젝트 에 들어가면 상상 의 행동 을 할 수 없다
원래부터 swift에 대응하지 않았다.
알아봤는데 자기 힘으로 하는 것도 그렇게 어렵지 않아요.
실현된 후에 문장으로 총결하였다.

컨디션


OS: iOS 9~iOS 12 확인
언어: Swift 4.2

전제 조건


탭뷰에서 상세한 항목으로 전환할 수 있습니다

샘플 항목


확인하면서 읽어주셨으면 좋겠습니다.
https://github.com/suzuhiroruri/scrollHidingNavbar

절차.


다음 변수 입력
MasterViewController.swift
///  スクロール開始地点
var scrollBeginPoint: CGFloat = 0.0

/// navigationBarが隠れているかどうか(詳細から戻った一覧に戻った際の再描画に使用)
var lastNavigationBarIsHidden = false
스크롤 시작 시 스크롤 시작점 얻기
MasterViewController.swift
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    scrollBeginPoint = scrollView.contentOffset.y
}
스크롤ViewDidScroll로 스크롤 측정
MasterViewController.swift
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let scrollDiff = scrollBeginPoint - scrollView.contentOffset.y
    updateNavigationBarHiding(scrollDiff: scrollDiff)
}
navigationBar 업데이트 표시/숨기기 방법
boundaryValue는 스크롤 임계값입니다. 원하는 대로 설정하십시오.
MasterViewController.swift
func updateNavigationBarHiding(scrollDiff: CGFloat) {
    let boundaryValue: CGFloat = 0.0

    /// navigationBar表示
    if scrollDiff > boundaryValue {
        navigationController?.setNavigationBarHidden(false, animated: true)
        lastNavigationBarIsHidden = false
        return
    }

    /// navigationBar非表示
    if scrollDiff < -boundaryValue {
        navigationController?.setNavigationBarHidden(true, animated: true)
        lastNavigationBarIsHidden = true
        return
    }
}
세부 화면으로 돌아가면 NavigationBar의 디스플레이 상태를 이전 상태로 업데이트합니다.
MasterViewController.swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if lastNavigationBarIsHidden {
        self.navigationController?.setNavigationBarHidden(true, animated: false)
    }
}
기본적으로 NavigationBar 가 자세히 마이그레이션할 때 표시되지 않으므로
MasterViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.setNavigationBarHidden(false, animated: false)
}
TableView의 Top을 SafeArea로 설정하면 iOS 10 시스템의 터미널에서 Table의 디스플레이 오프셋이 나타날 수 있습니다
top을 View의 Top으로 설정합니다.
또한 만약 이렇다면 아이폰X 시스템의 단말기에서 테이블 뷰를 굴릴 때 Safa Area에 끼운다
숨겨진 SafeArea 뷰를 추가합니다.

후기

navigationController?.hidesBarsOnSwipe = true
https://qiita.com/ken0nek/items/9e293bd7d730191cdbc5
가만히 있는 것도 아니고.
미묘한 스크롤이 스윙을 감지하지 못할 수도 있어요.
OS?기종 시도?NavigationBar가 표시되지 않는 경우가 있습니다.
이번에는 NavigationBar 디스플레이를 스크롤 베이스로 전환합니다.
만약 정정 등이 있으면 잘 부탁드립니다.

좋은 웹페이지 즐겨찾기