предотвратить рост UINavigationBar на прокрутке UITableView iOS 11 - PullRequest
0 голосов
/ 11 июня 2018

У меня возникла проблема, при которой у меня появляются следующие представления:

|||||||||||||
|           |
|    Nav    |
|-----------|
|  SomeView |
|-----------|
|           |
|   Table   |
|           |
|           |
|           |
|           |
|||||||||||||

При прокрутке таблицы вниз.

|||||||||||||
|           |
|           |
|    Nav    |
|           |
|-----------|
|           |
|   Table   |
|           |
|           |
|           |
|           |
|||||||||||||

Это происходит, только если prefersLargeTitles установлено в значение true.Осматривая это с помощью отладчика Xcode, я вижу, что рамка навигационной панели увеличивается по мере того, как увеличивается смещение содержимого табличного представления (я панорамирую UITableView вниз).Любая идея, как предотвратить рост панели навигации (и, следовательно, охватывая мой someView, который закреплен над uitableview?).

Обновление: мне удалось воспроизвести с очень простым проектом.Вот исходный код:

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.white
    navigationController?.navigationBar.prefersLargeTitles = true
    let testView = TestView()
    testView.translatesAutoresizingMaskIntoConstraints = false
    tableView.delegate = self
    tableView.dataSource = self
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
    tableView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(tableView)
    view.addSubview(testView)
    testView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    testView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    testView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    tableView.topAnchor.constraint(equalTo: testView.bottomAnchor).isActive = true
    tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

}

Вот что я вижу:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 11 июня 2018

Проблема не в изменении высоты панели навигации, а в расположении ваших видов.Вещи в главном представлении контроллера представления должны быть закреплены ограничениями автопилота, в конечном счете, в верхней части безопасной области, точно так, чтобы при изменении высоты панели навигации они оставались открытыми для просмотра.Это то, что является безопасной областью .

РЕДАКТИРОВАТЬ Вы обновили свой вопрос, включив в него некоторый код.Это полный код вашего ограничения:

testView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
testView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
testView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
tableView.topAnchor.constraint(equalTo: testView.bottomAnchor).isActive = true
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true


Этот код неисправен.testView не имеет ограничения height, поэтому ваш макет неоднозначен.Похоже, что это причина проблемы, которую вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...