Просмотр прыжков до второй анимации - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь анимировать табличное представление, чтобы оно выглядело как раскрывающееся меню, и оно выглядит нормально (хотя я предпочитаю, если оно отображается сверху вниз, в настоящее время из середины), проблема заключается в том, что я нажимаю кнопку, чтобы закрыть ее снова скачки табличного представления затем исчезают, после чего нажатие кнопки вообще ничего не делает. Я получаю ошибки ограничения после повторного нажатия кнопки.

Это то, что вызывается при нажатии кнопки:

    let height: CGFloat = tableViewOpen ? 0 : 300

    UIViewPropertyAnimator(duration: 0.5, curve: .linear, animations: {
        self.tableView.set(height: height)
        self.tableView.layoutIfNeeded()
    }).startAnimation()

    tableViewOpen = !tableViewOpen

Мои ограничения для tableView установлены с использованием некоторых расширений от компании, в которой я работаю, но выглядят так:

 tableView.pin(.top, to: .bottom, of: breedButton)
 tableView.pin(toSuperview: [.leading, .trailing])
 tableView.set(width: 250)

Подробнее - табличное представление находится в дочернем контроллере представления, который является просто кнопкой породы и табличным представлением. Ограничения дочерних viewcontrollers устанавливаются следующим образом:

    filterViewController.view.pin(.top, to: .top, of: titleLabel)
    filterViewController.view.pin(toSuperview: .leading)
    filterViewController.view.set(width: 250)

Не задана высота для tableview или childVC, не уверен, что это проблема.

Ошибки ограничения после нажатия второй кнопки:

(
    "<NSLayoutConstraint:0x600003e53a20 UITableView:0x7fe090829000.height == 300   (active)>",
    "<NSLayoutConstraint:0x600003e2c050 UITableView:0x7fe090829000.height == 0   (active)>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600003e53a20 UITableView:0x7fe090829000.height == 300   (active)>

enter image description here

1 Ответ

2 голосов
/ 06 апреля 2019

Проблема ясна: вы устанавливаете ограничение высоты при каждом нажатии кнопки здесь

 self.tableView.set(height: height)

но вы должны создать ограничение высоты один раз с помощью

var tableHeight:NSLayoutConstraint!

И установите его в viewDidLoad, затем измените его константу как

tableHeight.constant = show ? 300 : 0 
 UIViewPropertyAnimator(duration: 0.5, curve: .linear, animations: { 
     self.view.layoutIfNeeded()
 }).startAnimation()
...