Modern macOS table cells are NSViews that you recycle so you can do anything you care to construct in IB or programmatically
The important API you’ll want to use on NSTableView
here are
func register(NSNib?, forIdentifier: String)
to set your cell up via IB
func make(withIdentifier identifier: String, owner: Any?) -> NSView?
to get new or recycled instance (like dequeue)
And on the delegate…
func tableView(NSTableView, viewFor: NSTableColumn?, row: Int)
NSTableView has much the same API as UITableView so all the stuff like setting heights is the same. I dont think its gotten automatic cell heights yet.
Best docs here are the apple docs Apple Developer Documentation which explain a lot about views and using them in tables
Thanks
Warren