Подвиды UIScrollView не реагируют на прикосновения после анимации высоты Scroll View - PullRequest
0 голосов
/ 28 августа 2018

Я делаю приложение, которое имеет UIScrollView, который расширяется до высоты 280 и сжимается до высоты 0 при отклонении. Я использовал представление прокрутки, потому что обычное представление не будет «скрывать» свои подпредставления после анимации до высоты 0. Первоначально, до того, как произойдет анимация прокрутки, подпредставления отвечают, как ожидается, касанием, но после того, как высота представления вообще была анимирована, все подпредставления перестают отвечать на прикосновения пользователя. Я попытался убедиться, что zPosition всех подпредставлений больше, чем любое другое представление в контроллере представления, так что это не проблема. Похоже, что все кадры подпредставлений находятся в пределах их суперпредставлений. Ниже ссылка на видео моего выпуска:

Мой выпуск

Вот код того, что происходит, когда нажимается моя «кнопка параметров»:

@IBAction func parametersButtonPressed(_ sender: Any) {
    UIView.animate(withDuration: 0.25, animations: {

        if self.parametersExpanded {

            //Close searchView, make shadowView transparent
            self.searchView.frame.size.height = 0
            self.parametersButton.frame = self.parametersButton.frame.offsetBy(dx: 0, dy: -280)
            self.searchView.backgroundColor = UIColor.darkGray
            self.shadowView.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0)
        } else {

            //Expand the searchView, darken shadowView
            self.searchView.frame.size.height = 280
            self.parametersButton.frame = self.parametersButton.frame.offsetBy(dx: 0, dy: 280)
            self.searchView.backgroundColor = UIColor(red: 230/255, green: 230/255, blue: 230/255, alpha: 1)
            self.shadowView.layer.zPosition = 990
            self.shadowView.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.868)
        }
    }) { (bool) in
    }
}

Обратите внимание, что в моем приложении searchView изначально закрывается, т.е. имеет высоту кадра 0. Для этой демонстрации я сделал так, чтобы при первой загрузке приложения представление расширялось, чтобы я мог продемонстрировать, что подпредставления отвечают перед анимацией своего суперпредставления. Кроме того, есть shadowView, который я использую для затемнения представлений за ним, но он довольно четко скрывается за searchView, так что это не проблема.

1 Ответ

0 голосов
/ 29 августа 2018

Согласно комментариям ОП ...

Вероятная проблема была связана с явным изменением фрейма (ов) элементов представления, которые были настроены с ограничениями автоматического размещения. Распространенная проблема, которая может вызывать всевозможные странные ошибки / условия.

Изменение методов свертывания / развертывания анимированного представления на изменение свойств ограничения вместо явных изменений фрейма устранило проблему.

...