Re: split views, best practices for 10.8?
Re: split views, best practices for 10.8?
- Subject: Re: split views, best practices for 10.8?
- From: Kyle Sluder <email@hidden>
- Date: Tue, 11 Dec 2012 10:51:54 -0800
On Tue, Dec 11, 2012, at 10:34 AM, Chuck Soper wrote:
>
> Never? The documentation for
> setTranslatesAutoresizingMaskIntoConstraints:
> says, "You should call this method yourself for programmatically created
> views." This means that programmatically created views cannot be added to
> NSSplitView, NSTableCellView and other common container views.
Please read the Cocoa Autolayout Release Notes
<http://developer.apple.com/library/mac/#releasenotes/UserExperience/RNAutomaticLayout/_index.html#//apple_ref/doc/uid/TP40010631>:
> The principle circumstance in which you should not call setTranslatesAutoresizingMaskIntoConstraints: is when you are not the person who specifies a view’s relation to its container. For example, an NSTableRowView instance is placed by NSTableView. It might do this by allowing the autoresizing mask to be translated into constraints, or it might not. This is a private implementation detail. Other views on which you should not call setTranslatesAutoresizingMaskIntoConstraints: include an NSTableCellView, a subview of NSSplitView, an NSTabViewItem’s view, or the content view of an NSPopover, NSWindow, or NSBox.
>
> The outcome of this is that I need to avoid NSSplitView, NSTableCellView,
> etc. so that I can load (and reload) a custom view from a nib file.
> Instead, I'll need to implement my own split views using constraints and
> not rely on NSSplitView. I must call
> setTranslatesAutoresizingMaskIntoConstraints:NO for my programmatically
> created views.
You are misinterpreting the documentation. It is NOT a requirement to
call -setTranslatesAutoresizingMaskIntoConstraints: on
programatically-created views. The documentation is simply calling out a
case when you would call this method from code because IB didn't already
call it for you when you added the view to a view hierarchy in an
auto-layout-aware nib.
>
> >On 10.8, NSSplitView should be calling
> >-setTranslatesAutoresizingMaskIntoConstraints: already.
> >
> >> And, that NSSplitView won't add constraints that conflict with my
> >> subviews?
> >
> >This should be the case.
>
> NSTableView does add constraints that conflict with my subviews. Is
> NSSplitView different? And did that difference happen in 10.8?
NSTableView always sets the frame of its row and cell views using the
values returned by -frameOfCellAtColumn:row: and the like. If you add
constraints that conflict with those values, you will have a conflict.
You cannot use constraints to define the frame of a cell or row view in
an NSTableView. You can use constraints to position the contents of that
view, however. I do it all the time.
>
> >>
> >> The "Cocoa Auto Layout Guide" says not to call
> >> setTranslatesAutoresizingMaskIntoConstraints:NO for subviews of
> >> NSSplitView, but I think that's for 10.7 and the statement is no longer
> >> true for 10.8. Is that correct?
> >
> >See above.
>
> Being able to call setTranslatesAutoresizingMaskIntoConstraints:NO for
> subviews of
> NSSplitView would allow me to add programmatically created views to an
> NSSplitView instance. I think that NSSplitView in 10.8 works better with
> subviews with constraints (than 10.7), but I haven't been able to confirm
> this from the documentation.
As above, you are assuming you need to call
-setTranslatesAutoresizingMaskIntoConstraints: where no such requirement
exists.
--Kyle Sluder
_______________________________________________
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