Update
Я полностью пересмотрел этот вопрос после моих последних результатов.
Цель
Моя цель - реализовать следующий эффект:
- Существует простой вид таблицы
- Пользователь выбирает строку
- Выбранная строка расширяется, показывая другую метку ниже оригинальной.
Обратите внимание, что я знаю, что это может быть достигнуто путем вставки/удаления ячеек ниже выбранного, У меня уже есть успешная реализация с использованием этого метода.
На этот раз я хочу попытаться добиться этого, используя ограничения Auto Layout.
Текущее состояние
У меня есть образец проекта, доступный для любого, кто может проверить, а также открылась проблема. Подводя итог, вот что я пробовал до сих пор:
У меня здесь есть следующие взгляды:
- Вид содержимого ячейки
- Вид сверху, содержащий основную метку ( "основной вид" )
- Вид снизу под основным видом, содержащий первоначально скрытую метку ( "подробный просмотр" )
Я установил ограничения автоматической компоновки в своей ячейке следующим образом (обратите внимание, что это строго псевдоязык):
- mainView.top = contentView.top
- mainView.leading = contentView.leading
- mainView.trailing = contentView.trailing
- mainView.bottom = detailView.top
- detailView.leading = contentView.leading
- detailView.trailing = contentView.trailing
- detailView.bottom = contentView.bottom
- detailView.height = 0
У меня есть собственный подкласс UITableViewCell
с несколькими выходами, но наиболее важным здесь является выход для ограничения высоты, упомянутого ранее: идея здесь заключается в том, чтобы установить его constant
в 0 по умолчанию, но когда ячейка, установите его на 44, чтобы он стал видимым:
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
detailViewHeightConstraint.constant = selected ? detailViewDefaultHeight : 0
UIView.animateWithDuration(0.3) {
self.layoutIfNeeded()
}
}
У меня есть следующий результат:
Итак, эффект работает, но не совсем так, как я изначально представлял. Вместо того, чтобы нажимать основной вид вверх, я хочу, чтобы высота ячейки расти, когда отображается подробный вид, а сокращается, когда она скрыта.
Я рассмотрел иерархию макета во время выполнения:
- Исходное состояние в порядке. Высота представления содержимого равна высоте моего основного вида (в этом случае это 125 точек).
- Когда ячейка выбрана, ограничение высоты подробного представления увеличивается до 44 точек, а два представления правильно располагаются вертикально. Но вместо расширения содержимого ячейки, но вместо этого основное представление сжимается.
Вопрос
Мне нужно следующее: высота представления содержимого ячейки таблицы должна быть равна
- высота основного вида, когда ограничение высоты подробного представления равно 0 (в настоящее время это работает)
- высота главного представления + подробная высота представления, когда ограничение высоты просмотра подробного представления установлено правильно (это не работает).
Как мне установить ограничения для этого?