Xcode 10.1, Swift 4.2, macOS 10.14.2
Я пытаюсь создать простое приложение со списком дел для macOS, где есть ряд строк NSTableView
и внутрикаждый из них NSTextField
.Каждое поле является элементом дел.Я хочу, чтобы строки NSTableView
расширялись, чтобы соответствовать размеру текста в каждом NSTextField
.
У меня есть все следующие рабочие параметры:
- Установка текста в
NSTextField
расширяет строку NSTableView
по мере необходимости.В моей раскадровке установлены автоматические ограничения макета. - Использование
tableView.reloadData(forRowIndexes: ..., columnIndexes: ...)
устанавливает текст и корректно изменяет размер строки таблицы. Но выполнение tableView.reloadData()
всегда сбрасывает каждую NSTextField
в одну строку текста, как показано здесь: Интересно, если вы нажмете на NSTextField
послеперезагружая всю таблицу, поле снова изменяет размеры, чтобы соответствовать его содержимому:
Я полагаю, что я установил все соответствующие ограничения автоматического размещения на моем NSTextField
, и яЯ использую собственный подкласс для него (из полезного ответа здесь ):
class FancyField: NSTextField{
override var intrinsicContentSize: NSSize {
// Guard the cell exists and wraps
guard let cell = self.cell, cell.wraps else {return super.intrinsicContentSize}
// Use intrinsic width to jibe with autolayout
let width = super.intrinsicContentSize.width
// Set the frame height to a reasonable number
self.frame.size.height = 150.0
// Calcuate height
let height = cell.cellSize(forBounds: self.frame).height
return NSMakeSize(width, height)
}
override func textDidChange(_ notification: Notification) {
super.textDidChange(notification)
super.invalidateIntrinsicContentSize()
}
}
e Вот пример проекта: https://d.pr/f/90CTEh
Я в растерянности относительно того, что еще я могу попробовать.Есть идеи?