On Mar 14, 2017, at 18:26 , Daryle Walker <dary...@mac.com> wrote:
> 
> You’d think that this would be a solved problem….

It sort of is. I think you can find a solution on stackoverflow.com 
<http://stackoverflow.com/> (which is where I got the idea from IIRC) but you 
have to wade through the out of date stuff to pick out a modern way of doing 
it. Here’s the code I came up with (for an outline view, table view should be 
similar):

>       func resizeListItem (_ listItem: RecentObjectValue, cell: 
> NSTableCellView, width: CGFloat, resizedRows: NSMutableIndexSet? = nil)
>       {
>               cell.objectValue = listItem
>               
>               cell.textField?.preferredMaxLayoutWidth = width - 2
>               cell.needsUpdateConstraints = true
>               cell.layoutSubtreeIfNeeded ()
>               
>               let rowHeight = cell.fittingSize.height
>               
>               guard listItem.rowHeight != rowHeight else { return }
>               
>               listItem.rowHeight = rowHeight
>               let row = recentsListView.row (forItem: listItem)
>               
>               guard row >= 0, let rows = resizedRows else { return }
>               
>               rows.add (row)
>       }

The listItem parameter is a custom struct that contains the actual data 
displayed in the row (the data model of the outline view, in effect), but it 
also caches the row height. The resizedRows parameter just accumulates an 
optional set of changed heights for a subsequent “noteHeightOfRowsChanged”. The 
cell parameter is created once for measuring purposes, in viewDidLoad:

>               /* view controller instance variable */ headerCell = 
> recentsListView.make (withIdentifier: "HeaderCell", owner: self) as! 
> NSTableCellView
>               let headerConstraint = NSLayoutConstraint (item: headerCell, 
> attribute: .height, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: 
> .notAnAttribute, multiplier: 1, constant: 17)
>               NSLayoutConstraint.activate ([headerConstraint])

The only other thing you need is a strategy for deciding when to recalculate 
the heights. When the column width changes, obviously, as well as for inserted 
rows, but there might be other cases as well.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to