UICollectionView показать скрыть проблему с анимацией - PullRequest
0 голосов
/ 13 июня 2018

У меня возникает проблема с анимацией при скрытии UICollectionView.Анимация показа работает нормально, но когда я делаю скрытую анимацию, она сразу скрывает представление коллекции без анимации.Это код:

@objc func openMenu(sender: UIButton) {
        if sender.tag == 1 {
            self.buttonView.tag = 2
            self.arrow.image = UIImage(named: "arrowUp.png")
            UIView.animate(withDuration: 0.7, animations: {
                self.moduleView.frame.size.height = UIScreen.main.bounds.size.height - self.frame.size.height
            }, completion: { _ in
            })
        } else {
            self.buttonView.tag = 1
            self.arrow.image = UIImage(named: "arrowDown.png")
            UIView.animate(withDuration: 0.7, animations: {
                self.moduleView.frame.size.height = 0
            }, completion: { _ in
            })
        }
    }  

Вывод:

enter image description here

Странно, я заменилпредставление коллекции с простым UIView, и он работает нормально.Анимация снизу вверх работает отлично.Код:

@objc func openMenu(sender: UIButton) {
        if sender.tag == 1 {
            self.buttonView.tag = 2
            self.arrow.image = UIImage(named: "arrowUp.png")
            UIView.animate(withDuration: 0.7, animations: {
                self.testView.frame.size.height = UIScreen.main.bounds.size.height - self.frame.size.height
            }, completion: { _ in
            })
        } else {
            self.buttonView.tag = 1
            self.arrow.image = UIImage(named: "arrowDown.png")
            UIView.animate(withDuration: 0.7, animations: {
                self.testView.frame.size.height = 0
            }, completion: { _ in
            })
        }
    }  

Вывод:

enter image description here

Вопрос : почему нетэто работает для UICollectionView ?

Инициализация:

UICollectionView:

self.moduleView = ModulesCollectionView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 0), collectionViewLayout: UICollectionViewLayout())  
self.parentView.addSubView(self.moduleView)  

UIView:

self.testView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 0))  
self.parentView.addSubView(self.testView)

1 Ответ

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

Вам нужно использовать layoutSubViews() метод для правильной анимации.Пожалуйста, измените ваш код, как показано ниже:

@objc func openMenu(sender: UIButton) {
    if sender.tag == 1 {
        self.buttonView.tag = 2
        self.arrow.image = UIImage(named: "arrowUp.png")
        UIView.animate(withDuration: 0.7, animations: {
            self.moduleView.frame.size.height = UIScreen.main.bounds.size.height - self.frame.size.height
            // Add this line
            self.moduleView.layoutSubviews()
        }, completion: { _ in
        })
    } else {
        self.buttonView.tag = 1
        self.arrow.image = UIImage(named: "arrowDown.png")
        UIView.animate(withDuration: 0.7, animations: {
            self.moduleView.frame.size.height = 0
            // Add this line
            self.moduleView.layoutSubviews()
        }, completion: { _ in
        })
    }
}  
...