Если вам нужно добавить этот индикатор внутри представленного контроллера представления, если вы не хотите делать какие-либо пользовательские презентации и просто работать с переходами по умолчанию.
Первое, о чем нужно подумать, это иерархия вашего представления, будет ли индикатор частью вашей панели навигации, или, возможно, у вашего представления нет панели навигации, поэтому, соответственно, вам, вероятно, понадобится какой-то код, чтобы найти правильное представление для добавления этого индикатора.
В моем сценарии мне нужна была панель навигации, поэтому мои контроллеры представления находились внутри контроллера навигации, но вы могли бы сделать то же самое непосредственно внутри своих контроллеров представления:
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) { }
3: Это приведет к следующим результатам
Возможно, вам придется изменить некоторую логику здесь, основываясь на иерархии вашего сценария/контроллера представления, но, надеюсь, это даст вам некоторые идеи.
person
Shawn Frank
schedule
15.07.2021