Я работаю над возможностью скрывать и показывать строки, когда пользователь нажимает на кнопку.Когда я вызываю NSTableView.hideRows
, строки оживляются, как и ожидалось, но tableView
не тянет оставшиеся строки вместе с ним, поэтому в середине tableView
отображается большой разрыв.Если я нажму на дополнительную строку, то получу анимацию подтягивания оставшихся строк.
Изображения, показанные ниже ...
Таблица со всеми строками:
Показанный разрыв:
Код:
func numberOfRows(in tableView: NSTableView) -> Int {
return 50
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier.testCell, owner: nil) as? TestCell {
cell.label.stringValue = String(row)
return cell
}
return nil
}
func tableViewSelectionDidChange(_ notification: Notification) {
if let tableViewObject = notification.object as? NSTableView {
let index = tableViewObject.selectedRow
if index >= 0 {
self.tableView.hideRows(at: IndexSet(arrayLiteral: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10), withAnimation: .slideUp)
}
}
}
Я что-то пропустил?
Ссылка на Git https://gitlab.com/RollingGoron/broken-nstable
**************** Обновление *******************
Вызов self.tableView.noteHeightOfRows(withIndexesChanged: range)
после hideRows
устраняет проблему в моем примере проекта, но не решает проблему, если вы пытаетесь скрыть строки, которые находятся за пределами экрана.
Например, если вы попытаетесь скрыть 100 строк, они оживят их, но вместо того, чтобы оставить пробел в 100 строк, останется ~ 50 в зависимости от размера строк.
Я хотел бы посмотреть, можно ли скрыть строки, которые в данный момент находятся за пределами экрана.