3D Touch Peek в ячейке просмотра таблицы с преобразованием
У меня есть приложение чата, в котором я использую технику перевернутого табличного представления (табличное представление масштабируется до (1, -1) с преобразованием, и все сами ячейки также масштабируются до (1, -1), нейтрализуя эффект, таким образом, эффективно инвертируя табличное представление для отображения "первой" ячейки внизу), чтобы "запустить" табличное представление снизу. Все работает отлично, за исключением того, что мне нужно реализовать жесты взгляда и поп-музыки. Я подключил кнопку в своей ячейке табличного представления к целевому контроллеру представления и включил просмотр и всплывающее окно, как показано:
Жест работает, хотя, когда я частично касаюсь 3D и удерживаю его достаточно, чтобы выделить элемент, к которому прикоснулись (но не выдвигаю контроллер предварительного просмотра), я получаю перевернутое представление:
Как я могу сделать представление всплывающим с правильным преобразованием, все еще используя перевернутое табличное представление?
1 ответ
Причина, по которой он показывает вид вверх ногами после легкого нажатия, заключается не в том, что он удаляет преобразование из ячейки. На самом деле преобразование в ячейке остается таким, как есть, но в результате происходит вытягивание представления ячейки из контекста tableView. Поэтому преобразование в ячейке больше не противодействует преобразованию в таблице.
Я полагаю, что вы могли бы это исправить, создав подкласс UIStoryboardSegue, но, вероятно, было бы намного проще переключить ваш метод запуска таблицы внизу. Проверьте принятый ответ на этот вопрос.
Я использовал слегка измененную версию, которая учитывает панель навигации и строку состояния:
func updateTableContentInset() {
let numRows = tableView(self.tableView, numberOfRowsInSection: 0)
var contentInsetTop = self.tableView.bounds.size.height - (self.navigationController?.navigationBar.frame.size.height)! - 20
for i in 0..<numRows {
let rowRect = self.tableView.rectForRow(at: IndexPath(item: i, section: 0))
contentInsetTop -= rowRect.size.height
if contentInsetTop <= 0 {
contentInsetTop = 0
}
}
self.tableView.contentInset = UIEdgeInsetsMake(contentInsetTop, 0, 0, 0)
}
Просто добавьте это в свой UITableViewController и вызовите его для viewDidLoad(), и каждый раз, когда в таблицу добавляется новая строка.
После добавления новой строки и последующего вызова updateTableContentInset() вам нужно будет прокрутить до конца, например так:
tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
Так как здесь нет ничего с ног на голову, у вас не будет проблем с вашей Peek Segue.