Skip navigation.
 
mlRe: Programmatic "Size To Fit"
FROM : RICKY SHARP
DATE : Thu May 01 20:53:04 2008

On Thursday, May 01, 2008, at 01:14PM, "John Stiles" <<email_removed>> wrote:
>An NSView doesn't have an associated cell, so "size to fit" doesn't
>really have a meaningful answer. Size-to-fit works by asking the cell
>what size it should be.
>
>For a box, you could just enumerate the subviews and get the union of
>all the subview frames.
>
>Randall Meadows wrote:

>> On May 1, 2008, at 11:45 AM, Martin wrote:

>>> What about NSControl's sizeToFit method?

>>
>> I guess I didn't mean "controls" exclusively; I should have stuck with
>> "views", as (at least) one of the things I need to create is an NSBox
>> that contains multiple controls.  Which is why I was looking in NSView
>> for the right call.  But yeah, that'll work for the majority of things
>> I need to create.
>>
>> And now that I think about it....I don't really need (nor want) for
>> the box to have a border, so perhaps I can manipulate it just
>> encompass the sized-to-fit controls in it.  But still, is there no
>> such beast for NSViews?
>>
>> While I'm at it...is there no way to create an NSMatrix of
>> NSPopupButtons?  I can't seem to manage it in IB, and I'm not yet at
>> the point to try it in my code.
>>

>>> Martin
>>>
>>> On May 1, 2008, at 7:39 PM, Randall Meadows wrote:
>>>

>>>> I am creating a bunch of controls (at least NSTextfield,
>>>> NSPopupButton, NSSlider, and perhaps others) programmatically (that
>>>> will eventually be shown in an NSTableView), and would like to apply
>>>> the "Size To Fit" feature that IB provides.  However, there doesn't
>>>> seem to be any API that does that.
>>>>
>>>> Does IB simply brute-force the resizing for every type of view, or
>>>> am I missing the appropriate call in the NSView API?


Just to throw this out there to...

IB's size-to-fit function is still very much a mystery.  For all my IB palettes (IB 2.x) and plug-ins (IB 3.x), I added a custom mySizeToFit method for most of my controls.  Then, the inspector had a button that would invoke that method.  As much as possible, it would rely on framework routines such as cellSize to return an appropriate size for each cell.

Multi-cell controls would of course need to do a proper union and optionally space things out too.  At the end of the method, I would then do a setFrame (or was that setSize?)

Anyhow, I found it really weird that IB's size to fit menu never would invoke sizeToFit in code.  breakpoints and logging lines never were hit.  There's still a bit of IB magic going on where I think IB will only do work for specific classes.

The other nice thing of your own sizeToFit methods is that you could then add it to your view classes too.  I would recommend perhaps a protocol you could mix in to all your views/controls that needed such an API.  And, if you're doing IB palettes/plug-ins, you'd have something you could tap into as well.

--
Rick Sharp
Instant Interactive(tm)

Related mailsAuthorDate
mlProgrammatic "Size To Fit" Randall Meadows May 1, 19:39
mlRe: Programmatic "Size To Fit" Martin May 1, 19:45
mlRe: Programmatic "Size To Fit" John Stiles May 1, 19:48
mlRe: Programmatic "Size To Fit" Randall Meadows May 1, 19:55
mlRe: Programmatic "Size To Fit" Michael Watson May 1, 19:58
mlRe: Programmatic "Size To Fit" Stéphane Sudre May 1, 20:00
mlRe: Programmatic "Size To Fit" Rob Napier May 1, 20:02
mlRe: Programmatic "Size To Fit" John Stiles May 1, 20:02
mlRe: Programmatic "Size To Fit" RICKY SHARP May 1, 20:53
mlRe: Programmatic "Size To Fit" Stuart Malin May 1, 21:12