ClimbBar
概述
iOS 库,可以扩展具有可滚动元素(如 UITableView 和 UIWebView)的 View。
如示例应用中所示,滚动条会隐藏导航栏。
提示
当在 Xcode13.2 或更高版本以及 iOS 15.2 或更高版本的 iOS 上运行时,UINavigationController 的 UINavigationBar 可能无法正常工作。因此,您可能需要使用 UINavigationBar 或 UIView 等。
github 页面构建 | 状态 |
---|---|
结果 |
Gif
CocoaPods
pod 'ClimbBar'
git clone
通过SSH:对于那些打算经常直接提交代码的人来说,通过SSH克隆可能会提供更好的体验(需要上传SSH密钥到GitHub)
$ git clone [email protected]:keisukeYamagishi/ClimbBar.git
通过https:对于只读检查源代码的人,HTTPS是更好的选择
$ git clone https://github.com/keisukeYamagishi/ClimbBar.git
示例代码
override func loadView() {
super.loadView()
title = "ViewController"
let statusBarHeight = UIApplication.statusBarHeight
let toHeaderBottom = statusBarHeight + (navigationController?.barHeight ?? 0)
let conf = Configuration(range: statusBarHeight ... toHeaderBottom)
climbBar = ClimbBar(configurations: conf,
scrollable: tableView)
climbBar.emit { [weak self] state in
guard let self = self else { return }
self.navigationBar.setAlpha(alpha: CGFloat(state.progress))
let navigtionFrame = CGRect(x: 0,
y: state.originY,
width: self.view.frame.size.width,
height: 44)
self.navigationBar.frame = navigtionFrame
}
}
extension UIApplication {
static var statusBarFrame: CGRect {
UIApplication.shared.connectedScenes
.filter { $0.activationState == .foregroundActive }
.map { $0 as? UIWindowScene }
.compactMap { $0 }
.first?
.windows
.filter { $0.isKeyWindow }.first?
.windowScene?
.statusBarManager?
.statusBarFrame ?? .zero
}
static var statusBarHeight: CGFloat {
statusBarFrame.size.height
}
}