UINaviationBar를 스크롤하여 표시하거나 숨기는 방법[TableView][라이브러리 없음]
조건(대상)
·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 디스플레이를 스크롤 베이스로 전환합니다.
만약 정정 등이 있으면 잘 부탁드립니다.
Reference
이 문제에 관하여(UINaviationBar를 스크롤하여 표시하거나 숨기는 방법[TableView][라이브러리 없음]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suzuhiroruri@github/items/99e6363bc83198eb45f5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)