I'm surprised we don't hear more public complaints about how Flex deals with scrollbars and not resizing children when a scrollbar is added, ESPECIALLY if the children are relatively laid out.
The last large project I worked on we got so tired of adding fudge factor padding for the vertical scrollbar so there would be no need for a horizontal scrollbar that we monkey-patched Container.as to take the scrollbars into account when sizing children. Didn't see a huge performance hit in doing this and I'm pretty sure everyone cheered the first time a container was resized, started scrolling vertically, and resized its children to compensate without adding a horizontal scrollbar. On Wed, Jul 23, 2008 at 8:55 AM, Josh McDonald <[EMAIL PROTECTED]> wrote: > It's something I keep needing, so very soon I'm going to cook up an > example of a "one-child-only" container that will behave the way I think > they should regarding vertical scrollbars. Will post a link :) > > -Josh > > On Wed, Jul 23, 2008 at 11:12 PM, Richard Rodseth <[EMAIL PROTECTED]> > wrote: > >> Yes, but that doesn't look so good and wastes real estate. I think I >> can live with the overlay, given the padding I have. >> >> On Wed, Jul 23, 2008 at 12:15 AM, Alex Harui <[EMAIL PROTECTED]> wrote: >> > If you set verticalScrollPolicy="on" then the scrollbars will be >> factored in >> > >> > >> > >> > ________________________________ >> > >> > From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On >> > Behalf Of Josh McDonald >> > Sent: Tuesday, July 22, 2008 10:13 PM >> > To: flexcoders@yahoogroups.com >> > Subject: Re: [flexcoders] Measurement and scrolling >> > >> > >> > >> > The only way to not have scrollbars over the content (or to only have >> > vertical, but not all the time) is to do scrollbar management yourself >> > rather than relying on Flex's inbuilt methods of handling it. This is a >> > decision made by the Flex team to avoid having to double measure() stuff >> > when adding scrollbars to a container. >> > >> > -Josh >> > >> > On Wed, Jul 23, 2008 at 3:02 PM, Richard Rodseth <[EMAIL PROTECTED]> >> wrote: >> > >> > Below is code for a scrolling container of one child - a highly >> > simplified version of the tiling container I've been wrestling with >> > off and on for way too long now. The component below sizes the >> > first/only child to fit within it, with some padding, but respects the >> > minimums of the child, adding scroll bars if necessary. >> > >> > I discovered this evening that setting measuredMinWidth/Height in the >> > measure() method was what was messing things up. With that removed, >> > this component (and the more complex tiler) behaves properly, except >> > that the scollbars are drawn over the right/bottom padding. >> > >> > What is the appropriate way to compensate for that? Adding a fudge >> > factor to the measured values, or removing it from the value passed to >> > setActualSize in UDL had no effect at all. >> > >> > Thanks, I'm *really* close now... >> > >> > - Richard >> > >> > >> > public class MyContainer extends Container >> > { >> > private static const PADDING:Number = 10; >> > >> > public function MyContainer() >> > { >> > super(); >> > } >> > >> > >> > override protected function measure():void >> > { >> > var child:UIComponent = this.getChildren()[0] as >> > UIComponent; >> > >> > var childWidth:Number = >> > child.getExplicitOrMeasuredWidth(); >> > var childHeight:Number = >> > child.getExplicitOrMeasuredHeight(); >> > >> > measuredWidth = childWidth + 2 * PADDING ; >> > measuredHeight = childHeight + 2 * PADDING ; >> > } >> > >> > >> > override protected function >> > updateDisplayList(unscaledWidth:Number, >> > unscaledHeight:Number):void >> > { >> > super.updateDisplayList(unscaledWidth, unscaledHeight); >> > >> > var child:UIComponent = this.getChildren()[0] as >> UIComponent; >> > >> > var newWidth:Number = Math.max(unscaledWidth - (2 >> * >> > PADDING) , >> > child.minWidth); >> > var newHeight:Number = Math.max(unscaledHeight - >> (2 * >> > PADDING) , >> > child.minHeight); >> > >> > child.setActualSize(newWidth, newHeight); >> > child.move(PADDING, PADDING); >> > } >> > } >> > } >> > >> > <?xml version="1.0" encoding="utf-8"?> >> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >> > layout="absolute" minHeight="0" minWidth="0" >> > verticalScrollPolicy="off" horizontalScrollPolicy="off" >> > xmlns:comp="comp.*" >> > > >> > >> > <comp:MyContainer width="95%" height="95%" borderStyle="solid" >> > horizontalScrollPolicy="auto" verticalScrollPolicy="auto"> >> > <mx:Button label="400x400" minWidth="400" >> minHeight="400"/> >> > </comp:MyContainer> >> > >> > </mx:Application> >> > >> > ------------------------------------ >> > >> > -- >> > Flexcoders Mailing List >> > FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt >> > Search Archives: >> > http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups >> Links >> > >> > >> > >> > >> > -- >> > "Therefore, send not to know For whom the bell tolls. It tolls for >> thee." >> > >> > :: Josh 'G-Funk' McDonald >> > :: 0437 221 380 :: [EMAIL PROTECTED] >> > >> > >> >> ------------------------------------ >> >> -- >> Flexcoders Mailing List >> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt >> Search Archives: >> http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups >> Links >> >> >> >> > > > -- > "Therefore, send not to know For whom the bell tolls. It tolls for thee." > > :: Josh 'G-Funk' McDonald > :: 0437 221 380 :: [EMAIL PROTECTED] > >