Re: Subclassing NSCollectionViewFlowLayout

2019-10-24 Thread Arved von Brasch via Cocoa-dev
Yeah, good points. I solved it better by overriding my NSCollectionViewItem 
subclass’ preferredContentSize and setting it from my 
itemForRepresentedObjectAt dataSource function when I get access to the item.

Cheers,
Arved



> On 2019-10-22, at 03:41, David Duncan  wrote:
> 
> 
> 
>> On Oct 21, 2019, at 3:26 AM, Arved von Brasch via Cocoa-dev 
>>  wrote:
>> 
>> Hello list,
>> 
>> Thanks to someone on the list who provided me with a clue, I found that if I 
>> add this to my NSCollectionViewItem subclass:
>> 
>> override func viewWillAppear() {
>>   super.viewWillAppear()
>>   view.removeConstraints(view.constraints)
> 
> Don’t do this – you don’t know what constraints may be attached to the view 
> that you don’t know about.
> 
>>   view.addConstraint(NSLayoutConstraint.init(item: view, attribute: 
>> .width, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: 
>> .notAnAttribute, multiplier: 1, constant: view.frame.size.width))
>>   view.addConstraint(NSLayoutConstraint.init(item: view, attribute: 
>> .height, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: 
>> .notAnAttribute, multiplier: 1, constant: view.frame.size.height))
> 
> This doesn’t really make a whole lot of sense – this is basically saying 
> “whatever frame you have at this point, you will never be smaller than” which 
> kinda defeats the whole purpose.
> 
>>   }
>> 
>> the Collection View loads as expected and all the items appear at the proper 
>> size regardless of window resizes. However, I do end up with a large number 
>> of NSAutoresizingMaskLayoutConstraint clash errors.  Not quite sure how I’m 
>> going to resolve this yet, but I thought I’d post it in case anyone else 
>> follows in my footsteps.
> 
> Not too surprising, since the constraints you made are in direct conflict 
> with these auto resizing mask constraints (since the auto resizing mask 
> constraints basically tell the auto layout engine what the frame size will 
> be).
> 
>> 
>> Cheers,
>> Arved
>> 
>> 
>>> On 2019-10-20, at 21:54, Arved von Brasch  wrote:
>>> 
>>> Hello Cocoa List,
>>> 
>>> I’m in the process of porting a hobby project to up-to-date Swift so it can 
>>> be used on Catalina (and I can upgrade my work machine - still looking for 
>>> a QuickTime 7 Pro replacement, though).  I’ve encountered a phenomenon 
>>> subclassing NSCollectionViewFlowLayout that I haven’t been able to resolve.
>>> 
>>> I have a Core Data backed NSArrayController feeding data to a 
>>> NSCollectionView (still using XIBs, as that made the porting easier). That 
>>> all works fine, although was surprisingly tricky to get going.  I 
>>> implemented a NSCollectionViewFlowLayout subclass to provide a left 
>>> justified layout. I then implemented the NSCollectionViewDelegateFlowLayout 
>>> function sizeForItemAt: to provide custom sizes for my items.  This all 
>>> works as intended during testing when the collection view is first loaded.  
>>> However, if I resize the enclosing window, all the items reduce in size to 
>>> what appears to be a single pixel and I can’t work out where the tiny size 
>>> is coming from. My output of sizeForItemAt always seems to have sensible 
>>> values, and I can’t see an obvious place for where else the collection view 
>>> would be getting sizes from.
>>> 
>>> I’m only implementing an init function, to set the estimatedItemSize, 
>>> sectionInset and spacing values, and then overriding 
>>> layoutAttributesForElements, as that seems to be all that’s required for my 
>>> use case. I do not have any headers or footers or sections in my scenario, 
>>> so the Array Controller is pretty simple too, although it acts as the Data 
>>> Source and Delegate for the Collection View.
>>> 
>>> Can anyone give me pointers for what I am screwing up? My web searches for 
>>> this only return a meagre set of results which don’t help much.
>>> 
>>> Kind regards,
>>> Arved
>> 
>> ___
>> 
>> 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/david.duncan%40apple.com
>> 
>> This email sent to david.dun...@apple.com
> 

___

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


Re: Subclassing NSCollectionViewFlowLayout

2019-10-21 Thread David Duncan via Cocoa-dev


> On Oct 21, 2019, at 3:26 AM, Arved von Brasch via Cocoa-dev 
>  wrote:
> 
> Hello list,
> 
> Thanks to someone on the list who provided me with a clue, I found that if I 
> add this to my NSCollectionViewItem subclass:
> 
> override func viewWillAppear() {
>super.viewWillAppear()
>view.removeConstraints(view.constraints)

Don’t do this – you don’t know what constraints may be attached to the view 
that you don’t know about.

>view.addConstraint(NSLayoutConstraint.init(item: view, attribute: 
> .width, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: 
> .notAnAttribute, multiplier: 1, constant: view.frame.size.width))
>view.addConstraint(NSLayoutConstraint.init(item: view, attribute: 
> .height, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: 
> .notAnAttribute, multiplier: 1, constant: view.frame.size.height))

This doesn’t really make a whole lot of sense – this is basically saying 
“whatever frame you have at this point, you will never be smaller than” which 
kinda defeats the whole purpose.

>}
> 
> the Collection View loads as expected and all the items appear at the proper 
> size regardless of window resizes. However, I do end up with a large number 
> of NSAutoresizingMaskLayoutConstraint clash errors.  Not quite sure how I’m 
> going to resolve this yet, but I thought I’d post it in case anyone else 
> follows in my footsteps.

Not too surprising, since the constraints you made are in direct conflict with 
these auto resizing mask constraints (since the auto resizing mask constraints 
basically tell the auto layout engine what the frame size will be).

> 
> Cheers,
> Arved
> 
> 
>> On 2019-10-20, at 21:54, Arved von Brasch  wrote:
>> 
>> Hello Cocoa List,
>> 
>> I’m in the process of porting a hobby project to up-to-date Swift so it can 
>> be used on Catalina (and I can upgrade my work machine - still looking for a 
>> QuickTime 7 Pro replacement, though).  I’ve encountered a phenomenon 
>> subclassing NSCollectionViewFlowLayout that I haven’t been able to resolve.
>> 
>> I have a Core Data backed NSArrayController feeding data to a 
>> NSCollectionView (still using XIBs, as that made the porting easier). That 
>> all works fine, although was surprisingly tricky to get going.  I 
>> implemented a NSCollectionViewFlowLayout subclass to provide a left 
>> justified layout. I then implemented the NSCollectionViewDelegateFlowLayout 
>> function sizeForItemAt: to provide custom sizes for my items.  This all 
>> works as intended during testing when the collection view is first loaded.  
>> However, if I resize the enclosing window, all the items reduce in size to 
>> what appears to be a single pixel and I can’t work out where the tiny size 
>> is coming from. My output of sizeForItemAt always seems to have sensible 
>> values, and I can’t see an obvious place for where else the collection view 
>> would be getting sizes from.
>> 
>> I’m only implementing an init function, to set the estimatedItemSize, 
>> sectionInset and spacing values, and then overriding 
>> layoutAttributesForElements, as that seems to be all that’s required for my 
>> use case. I do not have any headers or footers or sections in my scenario, 
>> so the Array Controller is pretty simple too, although it acts as the Data 
>> Source and Delegate for the Collection View.
>> 
>> Can anyone give me pointers for what I am screwing up? My web searches for 
>> this only return a meagre set of results which don’t help much.
>> 
>> Kind regards,
>> Arved
> 
> ___
> 
> 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/david.duncan%40apple.com
> 
> This email sent to david.dun...@apple.com

___

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


Re: Subclassing NSCollectionViewFlowLayout

2019-10-21 Thread Arved von Brasch via Cocoa-dev
Hello list,

Thanks to someone on the list who provided me with a clue, I found that if I 
add this to my NSCollectionViewItem subclass:

override func viewWillAppear() {
super.viewWillAppear()
view.removeConstraints(view.constraints)
view.addConstraint(NSLayoutConstraint.init(item: view, attribute: 
.width, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: 
.notAnAttribute, multiplier: 1, constant: view.frame.size.width))
view.addConstraint(NSLayoutConstraint.init(item: view, attribute: 
.height, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: 
.notAnAttribute, multiplier: 1, constant: view.frame.size.height))
}

the Collection View loads as expected and all the items appear at the proper 
size regardless of window resizes. However, I do end up with a large number of 
NSAutoresizingMaskLayoutConstraint clash errors.  Not quite sure how I’m going 
to resolve this yet, but I thought I’d post it in case anyone else follows in 
my footsteps.

Cheers,
Arved


> On 2019-10-20, at 21:54, Arved von Brasch  wrote:
> 
> Hello Cocoa List,
> 
> I’m in the process of porting a hobby project to up-to-date Swift so it can 
> be used on Catalina (and I can upgrade my work machine - still looking for a 
> QuickTime 7 Pro replacement, though).  I’ve encountered a phenomenon 
> subclassing NSCollectionViewFlowLayout that I haven’t been able to resolve.
> 
> I have a Core Data backed NSArrayController feeding data to a 
> NSCollectionView (still using XIBs, as that made the porting easier). That 
> all works fine, although was surprisingly tricky to get going.  I implemented 
> a NSCollectionViewFlowLayout subclass to provide a left justified layout. I 
> then implemented the NSCollectionViewDelegateFlowLayout function 
> sizeForItemAt: to provide custom sizes for my items.  This all works as 
> intended during testing when the collection view is first loaded.  However, 
> if I resize the enclosing window, all the items reduce in size to what 
> appears to be a single pixel and I can’t work out where the tiny size is 
> coming from. My output of sizeForItemAt always seems to have sensible values, 
> and I can’t see an obvious place for where else the collection view would be 
> getting sizes from.
> 
> I’m only implementing an init function, to set the estimatedItemSize, 
> sectionInset and spacing values, and then overriding 
> layoutAttributesForElements, as that seems to be all that’s required for my 
> use case. I do not have any headers or footers or sections in my scenario, so 
> the Array Controller is pretty simple too, although it acts as the Data 
> Source and Delegate for the Collection View.
> 
> Can anyone give me pointers for what I am screwing up? My web searches for 
> this only return a meagre set of results which don’t help much.
> 
> Kind regards,
> Arved

___

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


Subclassing NSCollectionViewFlowLayout

2019-10-20 Thread Arved von Brasch via Cocoa-dev
Hello Cocoa List,

I’m in the process of porting a hobby project to up-to-date Swift so it can be 
used on Catalina (and I can upgrade my work machine - still looking for a 
QuickTime 7 Pro replacement, though).  I’ve encountered a phenomenon 
subclassing NSCollectionViewFlowLayout that I haven’t been able to resolve.

I have a Core Data backed NSArrayController feeding data to a NSCollectionView 
(still using XIBs, as that made the porting easier). That all works fine, 
although was surprisingly tricky to get going.  I implemented a 
NSCollectionViewFlowLayout subclass to provide a left justified layout. I then 
implemented the NSCollectionViewDelegateFlowLayout function sizeForItemAt: to 
provide custom sizes for my items.  This all works as intended during testing 
when the collection view is first loaded.  However, if I resize the enclosing 
window, all the items reduce in size to what appears to be a single pixel and I 
can’t work out where the tiny size is coming from. My output of sizeForItemAt 
always seems to have sensible values, and I can’t see an obvious place for 
where else the collection view would be getting sizes from.

I’m only implementing an init function, to set the estimatedItemSize, 
sectionInset and spacing values, and then overriding 
layoutAttributesForElements, as that seems to be all that’s required for my use 
case. I do not have any headers or footers or sections in my scenario, so the 
Array Controller is pretty simple too, although it acts as the Data Source and 
Delegate for the Collection View.

Can anyone give me pointers for what I am screwing up? My web searches for this 
only return a meagre set of results which don’t help much.

Kind regards,
Arved
___

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