Hi Chuck,

Autolayout works well with NSSplitView in 10.8.

On Nov 27, 2012, at 10:27 AM, Chuck Soper <chu...@veladg.com> wrote:

> Hi, I'm writing a Mac app for 10.8 (with Xcode 4.5.2) and I need to
> implement a layout similar to iPhoto. I think that the way to do use an
> NSSplitView with the right view containing another NSSplitView like this:
>  [ sourceView | [ contentView | infoView ] ]
> 
> 
> I considered relying entirely on auto layout and avoiding NSSplitView, but
> it seems like too much work and that NSSplitView provides good
> functionality. Some auto layout sample code shows how to implement a split
> view without using NSSplitView. One WWDC 2012 auto layout session shows
> how to use auto layout to enhance NSSplitView. At the moment, I think that
> using NSSplitView with auto layout is the way to go.
> 
> I need to include the follow features:
> 1. Constrain the sourceView and infoView to a min/max widths.
> I have this working using auto layout constraints. I haven't yet looked
> into constraining the split position using NSSplitView instance methods.

Adding min/max constraints is the right way to do this. The NSSplitView 
delegate methods will kick you out of autolayout mode.

> 
> 2. Give the contentView priority (allow it to resize and hold the other
> views) when resizing the window.
> I have this working by increasing the Holding Priority of the Left View of
> the NSSplitView. (I haven't implemented the nested split view yet.)

Sounds good.

> 
> 
> 3. Programmatically show/hide the sourceView and infoView with smooth
> animation. The Reminders app does this very well. I can't figure out how
> to do this. I think that adding and removing constraints in the action
> method to show/hide the sourceView is the correct approach, but I don't
> have that working yet. I noticed that setting the sourceView (the left
> view of an NSSplitView) to zero width using auto layout constraints does
> not cause isSubviewCollapsed:sourceView to return true. I don't know the
> recommended way to programmatically show/hide one view of an NSSplitView.
> Or, if avoiding NSSplitView and using auto layout is a possible solution.

If you want to animate a split view without changing the window size, try this:

- Add a constraint to the view that sets its width equal to its current width
- Call [[constraint animator] setConstant:0];
- Remove the constraint once the animation is done

You could also try using setPosition:ofDividerAtIndex:.

If you want to animate a split view while also changing the window size, adjust 
the holding priority so that the pane that you want to grow has the lowest 
priority, and just resize the window.

> 
> 
> One more issue:
> My NSWindowController nib file has "Use Auto Layout" checked. When I
> attempt to add an NSSplitView to the right view of another NSSplitView,
> Xcode/IB adds many suggested constraints that dramatically changes the
> existing behavior of my first NSSplitView, so much so that I don't know
> how to restore or fix it. Has anyone else had problems with this? I see
> two possible solutions:
> a. Turn off "Use Auto Layout" in the nib file and add this class method to
> the contentView of the window:
>  + (BOOL)requiresConstraintBasedLayout { return YES; }
> This prevents IB from messing with my constraints.
> b. Add the nested NSSplitView to its own nib file and programmatically add
> it as a subview to the right view of the other NSSplitView.

Are you sure you need a nested split view at all? A single split view can have 
multiple panes.

Hope that helps!
-Peter


_______________________________________________

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