Как скрыть панель навигации при прокрутке вниз, когда ограничения устанавливаются программно?
Я делаю весь свой пользовательский интерфейс программно, чтобы избежать массивного контроллера представления, у меня есть класс типа UIView, в котором я объявляю все свои элементы пользовательского интерфейса.
Я объявляю свой scrollView следующим образом:
class RegisterUIView: UIView {
lazy var scrollView: UIScrollView = {
let scroll: UIScrollView = UIScrollView()
scroll.contentSize = CGSize(width: self.frame.size.width, height: self.frame.size.height)
scroll.translatesAutoresizingMaskIntoConstraints = false
return scroll
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(scrollView)
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: self.topAnchor),
scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor),
scrollView.trailingAnchor.constraint(equalTo: self.trailingAnchor)
])
}
}
После объявления. Я создаю экземпляр RegisterUIView в моем ViewController. И вviewWillAppear
а также viewWillDisappear
Я использовал переменную hidesBarsOnSwipe
, чтобы скрыть панель навигации. Когда я прокручиваю вниз, полоса скрывается, но когда я прокручиваю вверх, полоса не отображается.
Я прочитал в другом вопросе здесь, что мне нужно, чтобы установить верхнее ограничение на надтаблицы. Как можно установить ограничения для супервизора?, когда я пытаюсь установить его, приложение вылетает, и, очевидно, из-за отсутствия супервизора.
class RegisterViewController: UIViewController {
private let registerView: RegisterUIView = {
let view: RegisterUIView = RegisterUIView(frame: .zero)
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.hidesBarsOnSwipe = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.hidesBarsOnSwipe = false
}
override func viewDidLoad() {
super.viewDidLoad()
setupLayout()
}
func setupLayout() {
view.addSubview(registerView)
NSLayoutConstraint.activate([
registerView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
registerView.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
registerView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),
registerView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor)
])
}
1 ответ
Перед добавлением ограничений добавьте представление прокрутки в подпредставление. Ваше приложение вылетает из-за того, что вы добавляете ограничения к объекту, а не в подпредставлении.
view.addSubview(scrollView)
добавьте эту строку кода в начало вашего setupLayout()
перед тем, как начать добавлять ограничения.