Наконец-то пришло решение, но я бы хотел, чтобы настоящий эксперт сказал мне, насколько оно надежно.(До быстрых и грязных констант).Я переопределил отрисовку ячейки таблицы с небольшими изменениями в ее инициализаторе следующим образом:
class TableCellView: NSTableCellView {
var title = NSTextField()
var height: NSLayoutConstraint!
convenience init(_ id: NSUserInterfaceItemIdentifier, itemCount: Int) {
self.init(frame: .zero)
identifier = id
rowSizeStyle = .custom
addSubview(title)
var s = "\(itemCount):\n"
for item in 0...(5 + itemCount) { s += "\(item)) Text written to a scrollable table view " }
let a = NSAttributedString(string: s, attributes: [NSAttributedString.Key.font : NSFont.systemFont(ofSize: 18.0)] )
title.attributedStringValue = a
title.textColor = NSColor.textColor
title.backgroundColor = NSColor.clear
title.translatesAutoresizingMaskIntoConstraints = false
title.isBordered = false
title.font = NSFont.systemFont(ofSize: 14.0)
title.widthAnchor.constraint(equalTo: widthAnchor, constant: 1).isActive = true
title.topAnchor.constraint(equalTo: topAnchor).isActive = true
title.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
height = heightAnchor.constraint(equalToConstant: 100) // Value doesn't matter, gets recalculated by override draw
height.isActive = true
}
override func draw(_ dirtyRect: NSRect) {
// Will recalculate height, but parameter must be larger than result
let bound = title.attributedStringValue.boundingRect(with: NSSize(width: frame.width, height: 4096), options: [.usesLineFragmentOrigin, .usesFontLeading])
height.constant = bound.height + 2.0
super.draw(dirtyRect)
}
}
Результат выглядит следующим образом:
и переоборачиваетсяправильно, когда я изменяю размер окна.
Надеюсь, это поможет кому-то еще.