《NSStackView蘋果文檔翻譯》

stackView可以水平或垂直方向來管理一組視圖,自動更新它們放置的位置并且在窗口大小變化時變化大小。

概述

stackview使用自動布局(系統(tǒng)的自動布局特性)來根據(jù)你的要求管理和對齊一組視圖。要想高效使用stackview,你需要理解自動布局約束的基礎(chǔ),這在《Auto Layout Guide》中有描述。

stackview的基本特性

stackview支持水平和垂直方向的布局,并且在窗口大小變化和Cocoa動畫時自動發(fā)生作用。你可以在運行時簡單配置stackview的內(nèi)容。也就是說,當你在IB中創(chuàng)建和配置stackview后你可以動態(tài)的添加或者刪除視圖,而不用顯式地使用布局約束。比如說,如果你給一個stackview設(shè)置了3個checkbox,并且動態(tài)地增加第四個,stackview會根據(jù)自身屬性的設(shè)置,自動根據(jù)需要添加約束。新的checkbox會從stackview那獲得動態(tài)的布局設(shè)置(約束)。

stackview是可以嵌套的,一個stackview在另一個stackview的一組視圖中也是一個有效的元素。

要點

不要對stackview的私有視圖添加自視圖或者約束。stackview的私有視圖可能會在未來macOS版本中改變,并且不確保會支持NSCoder編碼解碼(encoded or decoded).

布局方向和重力區(qū)域

一個stackview有3個所謂的重力區(qū)域,每個區(qū)域分別標識堆棧視圖布局的一部分。一個水平方向的stackview(默認類型)
,有一個前向的,一個中間的(不一定是左、中、右),一個后向的重力區(qū)域。這些區(qū)域的順序取決于stackview的userInterfaceLayoutDirection屬性(繼承自NSView)。在左至右的語言中,水平stackview的前向重力區(qū)域位于左側(cè)。為了獨立于語言強制從左到右布局,需要在你的stackview實例中顯式的調(diào)用userInterfaceLayoutDirection方法。

對于垂直布局,就是用orientation屬性為NSUserInterfaceLayoutOrientationVertical(來自枚舉NSUserInterfaceLayoutOrientation)。在一個垂直的stackview中,重力區(qū)域的分是上、中、下。

視圖分離和隱藏

stackview會自動分離或者重新固定它的視圖以響應布局的變化,比如由用戶發(fā)起的窗口大小重變化,或者在相同的視圖層次結(jié)構(gòu)中調(diào)整或重新定位另一個視圖。處于分離狀態(tài)的視圖不會出現(xiàn)在stackview的視圖層級中,但是它仍然消耗占用內(nèi)存。

為了允許視圖分離,需要設(shè)置stackview所謂的clipping resistance(剪切阻力)的值低于默認值NSLayoutPriorityRequired。詳情見setClippingResistancePriority:forOrientation:方法。

你可以影響哪個視圖首先分離(并且最后重新連接)。通過設(shè)置所謂的visibility屬性給每個你想要指定分離順序的視圖。一個visibility屬性值較低的視圖會比一個值較高的視圖先 分離,并且重連接也在其之后。詳情見NSStackViewVisibilityPriority枚舉和setVisibilityPriority:forView: 方法。

要顯示的將一個視圖從stackview中分離,可以調(diào)用setVisibilityPriority:forView: 方法并給一個NSStackViewVisibilityPriorityNotVisible值。要顯式重連接一個視圖到stackview,還是調(diào)用這個方法,并給一個NSStackViewVisibilityPriorityMustHold值。如果你隱藏一個屬于stackview的視圖(通過調(diào)用視圖的hidden方法,并給YES值),視圖并不會從stackview分離。他不再可見,也不再接受輸入時間,但是它任然是視圖層級的一部分,并會繼續(xù)參與自動布局。

當一個視圖將要被分離或者被重連接時,系統(tǒng)會調(diào)用stackview的代理方法,來給你時機在那瞬間運行代碼。詳情見NSStackViewDelegate。

主題

初始化一個stackview

+ stackViewWithViews:

用一個特定的視圖數(shù)組來創(chuàng)建并返回一個stackview


響應stack相關(guān)的變化

delegate

stackview 的代理對象

NSStackViewDelegate

要想設(shè)置一個自定義類來響應視圖的分離或重連解到stackview,設(shè)置這個自定義類遵循NSStackViewDelegate協(xié)議。然后設(shè)置stackview的delegata為你的自定義類對象。


創(chuàng)建和設(shè)置一個stackview

- setViews:inGravity:

給一個stackview的特定重力區(qū)域設(shè)置一組視圖,替換之前這個重力區(qū)域之前的所有視圖。

alignment

stackview內(nèi)部的視圖對齊方式

orientation

stackview的水平或者垂直布局方向

spacing

stackview中相鄰視圖的最小間距,以像素點為單位

edgeInsets

stackview內(nèi)部的填充間距,環(huán)繞它的所有view,以像素點為單位


設(shè)置stackview的動態(tài)行為

- setClippingResistancePriority:forOrientation:

當自動布局試圖減少stackview的大小時,設(shè)置自動布局優(yōu)先級,以便在stackview中防止子視圖的裁剪。

- setHuggingPriority:forOrientation:

設(shè)置堆棧視圖的自動布局優(yōu)先級,以最小化它的大小,為指定的用戶界面坐標軸。


添加或移除子視圖

- addView:inGravity:

在當前stackview重力區(qū)域后面,添加一個視圖到重力區(qū)域

- insertView:atIndex:inGravity:

在指定下標位置天機一個視圖到stackview重力區(qū)域

- removeView:

從stackview中移除一個特定的視圖


在stackview中設(shè)置視圖

- customSpacingAfterView:

返回特定視圖和它后一個視圖的間距,以像素點為單位

- setCustomSpacing:afterView:

指定特定視圖和它后一個視圖的間距,以像素點為單位

- visibilityPriorityForView:

返回特定視圖的可見優(yōu)先級( visibility priority )

- setVisibilityPriority:forView:

設(shè)置一個視圖的自動布局優(yōu)先級以在自動布局減少stackview大小時保持和stackview的連接


檢查stackview

views

stackview擁有的一組視圖

- viewsInGravity:

返回stackview中特定重力區(qū)域的視圖數(shù)組

detachedViews

返回已經(jīng)從stackview所有重力區(qū)域分離的視圖數(shù)組

- clippingResistancePriorityForOrientation:

返回當自動布局試圖減少stackview的大小時,為在stackview中拒絕裁剪視圖的自動布局優(yōu)先級

- huggingPriorityForOrientation:

返回stackview為一個用戶界面坐標軸最小化大小來盡可能適應所有包含的視圖時的自動布局優(yōu)先級


常量

NSUserInterfaceLayoutOrientation

兩個stackview布局方向,對于剪切阻力和hugging優(yōu)先級,是兩個用戶界面坐標軸

NSStackViewGravity

在stackview中可用的各種重力區(qū)域

NSStackViewVisibilityPriority

為視圖在stackview中保持連接的各種自動布局優(yōu)先級。

NSStackViewSpacingUseDefault

在stackview中的每個視圖后面指定默認間距的標志

原文鏈接

https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSStackView_Class/Chapters/Reference.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容