ios - Swift Presenting Controller Dismiss Bar 指示器
问题描述
对于你们大多数人来说,这应该是一个简单的问题。像所附照片一样呈现视图控制器现在在它们的顶部有一个栏(见红色箭头),表示用户可以向下滑动以关闭控制器。请帮助解决以下任何问题:
- 这个图标的正确术语是什么?
- 它是 swift 的 ui 工具/库的一部分还是只是一个 UIImage?
- 有人可以提供一个关于如何实现的简单片段 - 也许它类似于下面的代码
let sampleController = SampleController()
sampleController.POSSIBLE_OPTION_TO_SHOW_BAR_ICON = true
present(sampleController, animated: true, completion: nil)
解决方案
如果您不想做任何自定义演示并且只使用默认转换,则需要在正在呈现的视图控制器中添加此指示器。
首先要考虑的是您的视图层次结构,指示器将成为导航栏的一部分,或者您的视图可能没有导航栏 - 因此您可能需要一些代码来找到正确的视图来添加此指示器。
在我的场景中,我需要一个导航栏,因此我的视图控制器位于导航控制器中,但您可以直接在视图控制器中执行相同操作:
1:子类化导航控制器
这是可选的,但最好将所有这些自定义抽象到导航控制器中。
我检查一下是否显示了 NavigationController。这可能不是最好的检查方法,但由于这不是问题的一部分,请参考这些答案以检查视图控制器是否以模态方式呈现
class CustomNavigationController: UINavigationController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// this checks if the ViewController is being presented
if presentingViewController != nil {
addModalIndicator()
}
}
private func addModalIndicator() {
let indicator = UIView()
indicator.backgroundColor = .tertiaryLabel
let indicatorSize = CGSize(width: 30, height: 5)
let indicatorX = (navigationBar.frame.width - indicatorSize.width) / CGFloat(2)
indicator.frame = CGRect(origin: CGPoint(x: indicatorX, y: 8), size: indicatorSize)
indicator.layer.cornerRadius = indicatorSize.height / CGFloat(2.0)
navigationBar.addSubview(indicator)
}
}
2:呈现自定义导航控制器
let someVC = UIViewController()
let customNavigationController = CustomNavigationController()
customNavigationController.setViewControllers([stationsVC], animated: false)
present(playerNavigationController, animated: true) { }
您可能需要根据您的场景/视图控制器层次结构在此处更改一些逻辑,但希望这能给您一些想法。
推荐阅读
- python - 我正在尝试使用预训练网络对花朵进行分类,但由于某种原因它没有训练
- mysql - sql 不在 GROUP BY 中使用查询生成器 laravel
- vba - Name new sheet after page table was on
- python - python很难设置一个lambda函数
- objective-c - Objective-C:For循环变量名
- excel - VBA,基于自定义列表排序
- python - 为什么在我的用例中psychopy.visual.MovieStim3 这么慢?
- wordpress - 将媒体添加到文章时 wp-admin/admin-ajax.php 404
- python - Python设置异常
- python - 使用 pyad 确定用户帐户状态