UIKit - 스크롤 시 TabBar 숨김 처리하기
UIKit - 스크롤 시 TabBar 숨김 처리하기
스크롤 시 TabBar를 숨김처리 하기 위해선 delegate 메서드인 scrollViewWillEndDragging을 구현하여 처리할 수 있음.
velocity 값은 아래로 스크롤 했을 경우 양수 값을, 위로 스크롤 했을 경우 음수 값을 가짐.
구현 로직
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
extension BookListViewController: UITableViewDataSource, UITableViewDelegate{
// 중복 연산을 막기 위한 프로퍼티
private var isHiddenTabBar: Bool = false
func scrollViewWillEndDragging(
_ scrollView: UIScrollView,
withVelocity velocity: CGPoint,
targetContentOffset: UnsafeMutablePointer<CGPoint>
) {
// TabBar height 값 가져오기
let height = self.tabBarController?.tabBar.frame.height ?? 0
UIView.animate(withDuration: 0.5) {
// 위로 스크롤 했으며 TabBar 숨김 처리가 되어 있는 상태일 경우 처리
if velocity.y < 0 && self.isHiddenTabBar{
// 투명도 조정
self.tabBarController?.tabBar.alpha = 1.0
// TabBar의 origin 값을 조정하여 화면 위로 다시 나타나도록 처리
self.tabBarController?.tabBar.frame.origin = CGPoint(x: 0, y: UIScreen.main.bounds.maxY - height)
// view의 origin y 값에 TabBar의 높이 값을 빼줘서 TabBar가 렌더링될 영역을 확보함
self.view.frame.origin = CGPoint(x: self.view.frame.origin.x, y: self.view.frame.origin.y - height)
// TabBar 숨김 처리 false
self.isHiddenTabBar = false
}
// 아래로 스크롤 했으며 TabBar 숨김 처리가 되어 있지 않은 상태일 경우 처리
else if velocity.y > 0 && !self.isHiddenTabBar{
// 투명도 조정
self.tabBarController?.tabBar.alpha = 0.0
// TabBar의 origin 값을 조정하여 화면 밖으로 내려줌
self.tabBarController?.tabBar.frame.origin = CGPoint(x: 0, y: UIScreen.main.bounds.maxY)
// TabBar가 차지하고 있는 영역이 없어졌기 때문에 view의 origin y에 TabBar의 높이 값을 더해 빈 공간을 채워줌
self.view.frame.origin = CGPoint(x: self.view.frame.origin.x, y: self.view.frame.origin.y + height)
// TabBar 숨김 처리 true
self.isHiddenTabBar = true
}
}
}
}
결과
Reference
This post is licensed under CC BY 4.0 by the author.
