如果您不想进行任何自定义操作,只使用默认转场并在被呈现的视图控制器中添加此指示器,则需要将其添加到
within视图控制器中。
首先要考虑的是视图层次结构,该指示器是否将成为导航栏的一部分,或者您的视图没有导航栏 - 因此,您可能需要一些代码来查找正确的视图以添加此指示器。
在我的情况下,我需要一个导航栏,因此我的视图控制器位于导航控制器中,但您也可以直接在您的视图控制器内执行相同的操作:
1:子类化导航控制器
这是可选的,但将所有这些自定义封装到导航控制器中会很好。
我检查以查看NavigationController是否正在被呈现。这可能不是最佳检查方式,但由于这不是问题的一部分,请参阅
这些答案以检查视图控制器是否以模式呈现。
class CustomNavigationController: UINavigationController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
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) { }
3: 这将会产生以下的结果
![iOS Swift UIKit modal present dismiss indicator](https://istack.dev59.com/yIYmf.webp)
根据你的情境/视图控制器层次结构,你可能需要修改一些逻辑,但希望这能给你一些想法。