特性 | |
---|---|
📍 | Apple Maps 底部抽屉行为 |
⚓ | 支持使用 UIScrollView 和 UIView 进行拖动 |
🌒 | 允许添加可调节亮度的背景视图 |
📱 | 设置抽屉内容为 UIViewController 或 UINavigationController |
📖 | 使用 UINavigationController 在抽屉内部导航 |
🌈 | 添加一个或多个抽屉停止位置 |
🎯 | 通过编程方式更改抽屉位置 |
🌀 | 根据需要呈现任意数量的抽屉 |
🚀 | 同时或分别移动多个抽屉 |
🏹 | 橡皮筋效果 |
👋 | 滑动到底部时关闭 |
Apple Maps & Childs | 抽屉内部导航 | 下拉关闭 | 多个抽屉位置 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
要运行示例项目,请克隆该仓库,并首先从 Example 目录运行 pod install
。
底部抽屉子视图控制器必须遵循 Draggable 协议。
class MapsDemoBottomSheetController: UIViewController, Draggable{
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
tableView.delegate = self
tableView.dataSource = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//adds pan gesture recognizer to draggableView()
sheetCoordinator?.startTracking(item: self)
}
// MARK: Draggable protocol implementations
var sheetCoordinator: UBottomSheetCoordinator?
func draggableView() -> UIScrollView? {
return tableView
}
}
从主视图控制器创建一个 UBottomSheetCoordinator。使用 UBottomSheetCoordinator 添加和配置抽屉。
// parentViewController: main view controller that presents the bottom sheet
// call this within viewWillLayoutSubViews to make sure view frame has measured correctly. see example projects.
let sheetCoordinator = UBottomSheetCoordinator(parent: parentViewController)
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MapsDemoBottomSheetController") as! MapsDemoBottomSheetController
vc.sheetCoordinator = sheetCoordinator
sheetCoordinator.addSheet(vc, to: parentViewController)
ios9.0+, Xcode10+
UBottomSheet 可通过 CocoaPods 和 Swift Package Manager 获取。
将以下行添加到您的 Podfile
pod 'UBottomSheet'
在 XCode > File > Swift Packages > Add Package Dependency 中添加此 URL
https://github.com/OfTheWolf/UBottomSheet
TwitterProfile Twitter Profile 屏幕的嵌套滚动视图行为。
uğur, uguboz@gmail.com
UBottomSheet 在 MIT 许可证下可用。有关更多信息,请参见 LICENSE 文件。