A view that arranges an array of views horizontally or vertically and that automatically updates their placement and sizing when the window size changes.


@interface NSStackView : NSView


A stack view employs Auto Layout (the system’s constraint-based layout feature) to arrange and align an array of views according to your specification. To use a stack view effectively, you need to understand the basics of Auto Layout constraints as described in Auto Layout Guide.

Basic Features of Stack Views

A stack view supports vertical and horizontal layouts and interacts dynamically with window resizing and Cocoa animations. You can easily reconfigure the contents of a stack view at runtime. That is, after you create and configure a stack view in Interface Builder, you can add or remove views dynamically without explicitly working with layout constraints. For example, if you configure a stack view with three checkboxes and dynamically add a fourth, the stack view automatically adds constraints as needed, according to the stack view’s configuration. The new checkbox gains dynamic layout configuration from the stack view.

Stack views are nestable: a stack view is a valid element in the views array of another stack view.

For more information on NSStackView, see Organize Your User Interface with a Stack View.

Layout Direction and Gravity Areas

A stack view has three so-called gravity areas that each identify a section of the stack view’s layout. A horizontal stack view, which is the default type, has a leading, a center, and a trailing gravity area. The ordering of these areas depends on the value of the stack view’s userInterfaceLayoutDirection property (inherited from the NSView class). In a left to right language, the leading gravity area in a horizontal stack view is on the left. To enforce a left to right layout independently of language, explicitly set the layout direction by calling the inherited userInterfaceLayoutDirection method on your stack view instance.

To specify vertical layout, use the orientation property and the NSUserInterfaceLayoutOrientationVertical constant from the NSUserInterfaceLayoutOrientation enumeration. In a vertical stack view, the gravity areas always are top, center, and bottom.

View Detachment and Hiding

A stack view can automatically detach and reattach its views in response to layout changes, such as window resizing performed by the user, or resizing/repositioning of another view in the same view hierarchy. A view in a detached state is not present in the stack view’s view hierarchy, but it still consumes memory.

To allow views to detach, set the so-called clipping resistance for a stack view to a value lower than its default of NSLayoutPriorityRequired. See the setClippingResistancePriority:forOrientation: method.

You can influence which views detach first (and reattach last). Do this by setting the so-called visibility priority for each view whose detachment order you want to specify. A view with a lower visibility priority detaches before one with a higher priority, and reattaches after it. See the NSStackViewVisibilityPriority enumeration and the setVisibilityPriority:forView: method.

To explicitly detach a view from a stack view, call the setVisibilityPriority:forView: method with a value of NSStackViewVisibilityPriorityNotVisible. To explicitly reattach a view to a stack view, call the same method with a value of NSStackViewVisibilityPriorityMustHold. If you hide a view that belongs to a stack view (by calling the view’s hidden method with a value of YES), the view does not detach from the stack view. It is no longer visible and it no longer receives input events, but it remains part of the view hierarchy and continues to participate in Auto Layout.

The system calls a stack view delegate method when a view is about to be detached and when a view has been reattached, giving you the opportunity to run code at those times. See NSStackViewDelegate.


Creating a Stack View

+ stackViewWithViews:

Creates and returns a stack view with a specified array of views.

Responding to Stack-Related Changes


The delegate object for the stack view.


To configure a custom class to respond to a view detaching from, or reattaching to, a stack view (an instance of the NSStackView class), configure the custom class to adopt the NSStackViewDelegate protocol. Then, in a stack view instance, set the delegate property to refer to an instance of your custom class.

Instance Properties

Adding and Removing Views

- addView:inGravity:

Adds a view to a stack view gravity area, at the end of the gravity area.

- insertView:atIndex:inGravity:

Adds a view to a stack view gravity area at a specified index position.

- setViews:inGravity:

Specifies an array of views for a specified gravity area in the stack view, replacing any views previously assigned to the gravity area.

- removeView:

Removes a specified view from the stack view.

Inspecting a Stack View


The array of views owned by the stack view.

- viewsInGravity:

Returns the array of views in the specified gravity area in the stack view.


An array containing the detached views from all of the stack view’s gravity areas.

- clippingResistancePriorityForOrientation:

Returns the Auto Layout priority for resisting clipping of views in the stack view when Auto Layout attempts to reduce the stack view’s size.

- huggingPriorityForOrientation:

Returns the Auto Layout priority for the stack view to minimize its size to fit its contained views as closely as possible, for a specified user interface axis.

Configuring the Stack View Layout


The horizontal or vertical layout direction of the stack view.


The two stack view layout directions and, for clipping resistance and hugging priority, the two user interface axes.


The view alignment within the stack view.


The minimum spacing, in points, between adjacent views in the stack view.


The geometric padding inside the stack view, surrounding its views, in points.


A Boolean value that indicates whether the spacing between adjacent views should equal each other.


Configuring Views in a Stack View

- customSpacingAfterView:

Returns the custom spacing, in points, between a specified view in the stack view and the view that follows it.

- setCustomSpacing:afterView:

Specifies custom spacing, in points, to employ between a specified view and the view that follows it in the stack view.

- visibilityPriorityForView:

Returns the visibility priority for a specified view in the stack view.

- setVisibilityPriority:forView:

Sets the Auto Layout priority for a view to remain attached to the stack view when Auto Layout reduces the stack view’s size.

Configuring Dynamic Behavior for a Stack View

- setClippingResistancePriority:forOrientation:

Sets the Auto Layout priority for resisting clipping of views in the stack view when Auto Layout attempts to reduce the stack view’s size.

- setHuggingPriority:forOrientation:

Sets the Auto Layout priority for the stack view to minimize its size, for a specified user interface axis.



The various gravity areas available in a stack view.


The various Auto Layout priorities for a view in the stack view to remain attached.


The flag to specify default spacing following each view in the stack view.


Inherits From