ограничение нижнего вида таблицы не будет анимироваться / изменяться

#ios #swift #uitableview

#iOS #swift #uitableview

Вопрос:

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

 view.addSubview(tableView)
tableView.translatesAutoresizingMaskIntoConstraints = false

let tableViewBottomConstraint = NSLayoutConstraint(
    item: tableView,
    attribute: .bottom,
    relatedBy: .equal,
    toItem: view,
    attribute: .bottom,
    multiplier: 1.0,
    constant: 0.0
)

NSLayoutConstraint.activate([
    tableView.topAnchor.constraint(equalTo: view.topAnchor),
    tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])

view.addConstraint(tableViewBottomConstraint)
self.tableViewBottomConstraint = tableViewBottomConstraint

view.addSubview(messageTextView)
messageTextView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    messageTextView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    messageTextView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
    messageTextView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
 

Когда я получаю уведомление с клавиатуры, я делаю следующее:

 tableViewBottomConstraint?.constant = info.endFrame.height

UIView.animate(
    withDuration: info.animationDuration,
    delay: 0.0,
    options: info.animationOptions,
    animations: {
        self?.view?.layoutIfNeeded()
    },
    completion: nil
 

Однако ничего не происходит. Представление таблицы вообще не перемещается. Что я здесь делаю не так?

Ответ №1:

Вам может понадобиться

 tableViewBottomConstraint?.constant = -1 * info.endFrame.height
 

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