Проблема с автоматическим размещением при отображении раскрывающейся таблицы - PullRequest
1 голос
/ 26 мая 2020

В моем приложении я хочу отображать раскрывающуюся таблицу после щелчка по текстовому полю. Но он плохо работает.

tableViewOne.snp.updateConstraints { (make) in

                let superViewOriginY: CGFloat = (textField.superview?.frame.origin.y)!
                let textFieldMaxY: CGFloat = textField.frame.maxY
                let navigationHeight: CGFloat = self.navigationController!.navigationBar.frame.size.height
                let textFieldHeight = textField.frame.height
                let tableViewOneTopPsition = superViewOriginY + textFieldMaxY + navigationHeight + textFieldHeight

                make.top.equalTo(tableViewOneTopPsition)
                make.left.equalTo(15)
                make.right.equalTo(-15)
                make.height.equalTo(0)
            }
            self.view.layoutIfNeeded()
            UIView .animate(withDuration: 0.4, animations: {
                self.tableViewOne.snp.updateConstraints({ (make) -> Void in
                    make.height.equalTo(170)
                })
                self.view.layoutIfNeeded()
            }, completion: nil)

Написав этот код, он работает для симулятора iphone 11 Max. Но для симулятора iphone 8 plus есть некоторый разрыв между текстовым полем и табличным представлением. На следующих изображениях есть текстовые поля внутри представления стека.

https://i.stack.imgur.com/JDUkw.jpg

https://i.stack.imgur.com/GkQXd.png

   First one image is the iphone 11max pro image 
   and the second one is the iphone 8 plus image

если я напишу

 make.top.equalTo(textFieldMaxY)
the i will be 

https://i.stack.imgur.com/fmNNe.jpg

Пожалуйста, помогите мне решить проблему.

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Добавьте эту строку

tableViewOne.snp.updateConstraints { (make) in

    make.top.equalTo(textField.snp.bottom).offset(5)
    make.left.equalTo(15)
    make.right.equalTo(-15)
    make.height.equalTo(0)
 }

            UIView .animate(withDuration: 0.4, animations: {
                self.tableViewOne.snp.updateConstraints({ (make) -> Void in
                    make.height.equalTo(170)
                })
                self.view.layoutIfNeeded()
            }, completion: nil)
0 голосов
/ 26 мая 2020

Убедитесь, что ваши ограничения верны. Чтобы исправить указанную вами ошибку, вы можете изменить topAnchor ограничение tableViewOne на bottomAnchor из textField. Не вычисляйте кадр, чтобы получить topAnchor, вместо этого задайте ограничение для вспомогательных представлений.

tableViewOne.topAnchor.constraint(equalTo: textField.bottomAnchor).isActive = true

При добавлении удалите эту строку:

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