Элементы панели инструментов сбрасываются в раскадровку по умолчанию при прокрутке вверх на iOS 13 - PullRequest
0 голосов
/ 03 октября 2019

У меня есть два набора элементов панели инструментов, которые должны отображаться в зависимости от того, включено ли редактирование. При нажатии кнопки редактирования панель инструментов (и элементы панели навигации) должны измениться на соответствующий набор элементов. Я делаю это, вызывая эту функцию внутри моего переопределения setEditing(_:animted:):

func configureToolbarItems(isEditing: Bool, animated: Bool) {
    func flexibleSpace() -> UIBarButtonItem {
        return UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    }

    if isEditing {
        navigationController?.toolbar.setItems([deleteSelectedItemsItem,
                                                flexibleSpace(),
                                                addToCollectionButtonItem,
                                                flexibleSpace(),
                                                shareBarItem], animated: animated)
        navigationItem.setLeftBarButtonItems([selectAllBarButtonItem], animated: animated)
    } else {
        navigationController?.toolbar.setItems([organizeButton,
                                                flexibleSpace(),
                                                addButton], animated: animated)
        navigationItem.setLeftBarButtonItems([settingsBarButtonItem, layoutButton], animated: animated)
    }

}

Не было проблем с использованием этого ... до iOS 13. На iOS 13 при прокрутке до верхней части представления коллекцииэлементы панели инструментов сбрасываются на элементы панели инструментов, установленные в раскадровке, в результате чего отображается неправильный набор элементов.

Я проверил это, добавив новый элемент панели инструментов в раскадровку, которая не используется. для всего. Когда вызывается приведенный выше код, панель инструментов настраивается правильно, но при прокрутке вверх отображается элемент кнопки тестовой панели на панели инструментов снова. Вот видео (с элементом, установленным только из раскадровки, только что названным («Предмет»):

problem demonstration

Тот же код работает, как и ожидалосьна iOS 12 и ниже. Я попытался переопределить scrollViewDidScrollToTop(_ scrollView:) и scrollViewDidScroll(_:) и вызвать там свою функцию configureToolbarItems, но ни одна из них не сработала.

1 Ответ

0 голосов
/ 03 октября 2019

Ну, я понял это. Я должен использовать setToolbarItems(_:animated:) на моем контроллере вида, а не устанавливать элементы на панели инструментов контроллера навигации.

Я изменил свой код на это, и теперь он работает правильно.

func configureToolbarItems(isEditing: Bool, animated: Bool) {
    func flexibleSpace() -> UIBarButtonItem {
        return UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    }

    if isEditing {
        setToolbarItems([deleteSelectedItemsItem,
                         flexibleSpace(),
                         addToCollectionButtonItem,
                         flexibleSpace(),
                         shareBarItem], animated: animated)
        navigationItem.setLeftBarButtonItems([selectAllBarButtonItem], animated: animated)
    } else {
        setToolbarItems([organizeButton,
                         flexibleSpace(),
                         addButton], animated: animated)
        navigationItem.setLeftBarButtonItems([settingsBarButtonItem, layoutButton], animated: animated)
    }

}
...