Получить высоту UIView и использовать ее для своих собственных ограничений - PullRequest
1 голос
/ 04 апреля 2020

Как я могу узнать height моего UIView до того, как он будет представлен на самом деле?

Вот что я попробовал:

print(wishWishView.frame.size.height)

self.view.addSubview(self.wishWishView)

wishWishView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
wishWishView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true

wishWishConstraint =  wishWishView.topAnchor.constraint(equalTo: self.view.bottomAnchor)
wishWishConstraint.isActive = true

UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: .curveEaseInOut, animations: {
        self.transparentView.alpha = 0.7
        self.wishWishConstraint = self.wishWishView.topAnchor.constraint(equalTo: self.view.bottomAnchor, constant: - self.keyboardHeight)
        self.view.layoutIfNeeded()

    }, completion: nil)

Проблема в том, что wishWishView.frame.size.height равен 0 до тех пор, пока представление фактически не будет представлено.

Чего я действительно хочу добиться, так это скрыть представление внизу. Я знаю, что могу просто использовать constant: 1000, но это довольно грубая сила и не очень чистая.

Редактировать:

Процесс:

1. пользователь нажимает на кнопку

2. вид отображается снизу справа над панелью управления

3. пользователь отклоняет представление

4. представление перемещается к нижней части представления

Анимация

У меня есть все functions и variables (func viewAppears, keyboardHeight, ...), но я борюсь с constraints.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Итак, я решил свою проблему, и анимация теперь работает как положено. Однако актуальная проблема до сих пор не решена.

let height = CGFloat(130)

@objc func addWishButtonTapped(){    

    let screenSize = UIScreen.main.bounds.size
    self.wishWishView.frame = CGRect(x: 0, y: screenSize.height, width: screenSize.width, height: height)
    self.view.addSubview(self.wishWishView)

    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: .curveEaseInOut, animations: {
    self.transparentView.alpha = 0.7
    self.wishWishView.frame = CGRect(x: 0, y: screenSize.height - self.height - self.keyboardHeight, width: screenSize.width, height: self.height)

}, completion: nil)

Как видите, я использую жестко закодированный height ...

0 голосов
/ 04 апреля 2020

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

Затем, когда вы захотите показать вид, просто измените константу этого ограничения (вы можете использовать высоту вашего вида здесь) и вызовите layoutIfNeeded () в анимационном блоке UIView.

...