Re: NSScrollView does not honor system preferences for scroll bars ("when scrolling"), when I override the -tile method.
Re: NSScrollView does not honor system preferences for scroll bars ("when scrolling"), when I override the -tile method.
- Subject: Re: NSScrollView does not honor system preferences for scroll bars ("when scrolling"), when I override the -tile method.
- From: Lee Ann Rucker <email@hidden>
- Date: Wed, 04 Jul 2012 11:30:46 -0700 (PDT)
There's some complicated behind-the-scenes stuff in NSScrollView et al to avoid breaking apps that put extra stuff in the horizontal scroll zone because with some of the new style settings the scroll zone size is highly variable in both dimensions. Wouldn't surprise me if there's code to detect a setFrame on the horizontal scroller and mark the scrollview as being legacy style. I'm pretty sure one of the Lion WWDC sessions advised against doing this in the future.
I have a custom scroll view and it has two tile methods: one for NSScrollerStyleLegacy/10.6 and earlier, and one for overlay style; only the legacyTile one adjusts the horizontal scroller frame. It adds a secondary subview to the scrollview itself, if you're interested - it might work for your UI to have the extra widgets in their own view instead of sharing space with the scroller.
NSScroller is set up to be subclassed and tell OSX it knows how to handle new scrollbars - see [NSScroller isCompatibleWithOverlayScrollers] - so there's another way to add things to the scroller area.
----- Original Message -----
From: "Sanjay Arora" <email@hidden>
To: email@hidden
Sent: Wednesday, July 4, 2012 12:45:01 AM
Subject: NSScrollView does not honor system preferences for scroll bars ("when scrolling"), when I override the -tile method.
Below is my code that overlays a control on the horizontal scrollbar.
(void)tile {
[super tile];
if (subControl) {
NSRect subControlFrame = [subControl frame];
NSScroller *horizontalScroller = [self
horizontalScroller];
NSRect scrollerFrame = [horizontalScroller frame];
// adjust control position here in the scrollview
coordinate space
subControlFrame.origin.x = scrollerFrame.origin.x;
subControlFrame.origin.y = scrollerFrame.origin.y;
subControlFrame.size.height = scrollerFrame.size.height;
// move controls
[subControl setFrame:subControlFrame];
NSRect subControlFrame2 = [subControl frame];
scrollerFrame.origin.x += subControlFrame2.size.width;
scrollerFrame.size.width -= subControlFrame2.size.width;
[horizontalScroller setFrame:scrollerFrame];
}
}
After the line
[subControl setFrame:subControlFrame];
it stops responding to system preferences??
Regards
Sanjay
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden