《NSStackView苹果文档翻译》

stackView可以水平或垂直方向来管理一组视图,自动更新它们放置的位置并且在窗口大小变化时变化大小。

概述

stackview使用自动布局(系统的自动布局特性)来根据你的要求管理和对齐一组视图。要想高效使用stackview,你需要理解自动布局约束的基础,这在《Auto Layout Guide》中有描述。

stackview的基本特性

stackview支持水平和垂直方向的布局,并且在窗口大小变化和Cocoa动画时自动发生作用。你可以在运行时简单配置stackview的内容。也就是说,当你在IB中创建和配置stackview后你可以动态的添加或者删除视图,而不用显式地使用布局约束。比如说,如果你给一个stackview设置了3个checkbox,并且动态地增加第四个,stackview会根据自身属性的设置,自动根据需要添加约束。新的checkbox会从stackview那获得动态的布局设置(约束)。

stackview是可以嵌套的,一个stackview在另一个stackview的一组视图中也是一个有效的元素。

要点

不要对stackview的私有视图添加自视图或者约束。stackview的私有视图可能会在未来macOS版本中改变,并且不确保会支持NSCoder编码解码(encoded or decoded).

布局方向和重力区域

一个stackview有3个所谓的重力区域,每个区域分别标识堆栈视图布局的一部分。一个水平方向的stackview(默认类型)
,有一个前向的,一个中间的(不一定是左、中、右),一个后向的重力区域。这些区域的顺序取决于stackview的userInterfaceLayoutDirection属性(继承自NSView)。在左至右的语言中,水平stackview的前向重力区域位于左侧。为了独立于语言强制从左到右布局,需要在你的stackview实例中显式的调用userInterfaceLayoutDirection方法。

对于垂直布局,就是用orientation属性为NSUserInterfaceLayoutOrientationVertical(来自枚举NSUserInterfaceLayoutOrientation)。在一个垂直的stackview中,重力区域的分是上、中、下。

视图分离和隐藏

stackview会自动分离或者重新固定它的视图以响应布局的变化,比如由用户发起的窗口大小重变化,或者在相同的视图层次结构中调整或重新定位另一个视图。处于分离状态的视图不会出现在stackview的视图层级中,但是它仍然消耗占用内存。

为了允许视图分离,需要设置stackview所谓的clipping resistance(剪切阻力)的值低于默认值NSLayoutPriorityRequired。详情见setClippingResistancePriority:forOrientation:方法。

你可以影响哪个视图首先分离(并且最后重新连接)。通过设置所谓的visibility属性给每个你想要指定分离顺序的视图。一个visibility属性值较低的视图会比一个值较高的视图先 分离,并且重连接也在其之后。详情见NSStackViewVisibilityPriority枚举和setVisibilityPriority:forView: 方法。

要显示的将一个视图从stackview中分离,可以调用setVisibilityPriority:forView: 方法并给一个NSStackViewVisibilityPriorityNotVisible值。要显式重连接一个视图到stackview,还是调用这个方法,并给一个NSStackViewVisibilityPriorityMustHold值。如果你隐藏一个属于stackview的视图(通过调用视图的hidden方法,并给YES值),视图并不会从stackview分离。他不再可见,也不再接受输入时间,但是它任然是视图层级的一部分,并会继续参与自动布局。

当一个视图将要被分离或者被重连接时,系统会调用stackview的代理方法,来给你时机在那瞬间运行代码。详情见NSStackViewDelegate。

主题

初始化一个stackview

+ stackViewWithViews:

用一个特定的视图数组来创建并返回一个stackview


响应stack相关的变化

delegate

stackview 的代理对象

NSStackViewDelegate

要想设置一个自定义类来响应视图的分离或重连解到stackview,设置这个自定义类遵循NSStackViewDelegate协议。然后设置stackview的delegata为你的自定义类对象。


创建和设置一个stackview

- setViews:inGravity:

给一个stackview的特定重力区域设置一组视图,替换之前这个重力区域之前的所有视图。

alignment

stackview内部的视图对齐方式

orientation

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

spacing

stackview中相邻视图的最小间距,以像素点为单位

edgeInsets

stackview内部的填充间距,环绕它的所有view,以像素点为单位


设置stackview的动态行为

- setClippingResistancePriority:forOrientation:

当自动布局试图减少stackview的大小时,设置自动布局优先级,以便在stackview中防止子视图的裁剪。

- setHuggingPriority:forOrientation:

设置堆栈视图的自动布局优先级,以最小化它的大小,为指定的用户界面坐标轴。


添加或移除子视图

- addView:inGravity:

在当前stackview重力区域后面,添加一个视图到重力区域

- insertView:atIndex:inGravity:

在指定下标位置天机一个视图到stackview重力区域

- removeView:

从stackview中移除一个特定的视图


在stackview中设置视图

- customSpacingAfterView:

返回特定视图和它后一个视图的间距,以像素点为单位

- setCustomSpacing:afterView:

指定特定视图和它后一个视图的间距,以像素点为单位

- visibilityPriorityForView:

返回特定视图的可见优先级( visibility priority )

- setVisibilityPriority:forView:

设置一个视图的自动布局优先级以在自动布局减少stackview大小时保持和stackview的连接


检查stackview

views

stackview拥有的一组视图

- viewsInGravity:

返回stackview中特定重力区域的视图数组

detachedViews

返回已经从stackview所有重力区域分离的视图数组

- clippingResistancePriorityForOrientation:

返回当自动布局试图减少stackview的大小时,为在stackview中拒绝裁剪视图的自动布局优先级

- huggingPriorityForOrientation:

返回stackview为一个用户界面坐标轴最小化大小来尽可能适应所有包含的视图时的自动布局优先级


常量

NSUserInterfaceLayoutOrientation

两个stackview布局方向,对于剪切阻力和hugging优先级,是两个用户界面坐标轴

NSStackViewGravity

在stackview中可用的各种重力区域

NSStackViewVisibilityPriority

为视图在stackview中保持连接的各种自动布局优先级。

NSStackViewSpacingUseDefault

在stackview中的每个视图后面指定默认间距的标志

原文链接

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容