当前位置: 代码网 > it编程>App开发>苹果IOS > Stack View自定义间隙减少约束的数量

Stack View自定义间隙减少约束的数量

2024年05月15日 苹果IOS 我要评论
引言apple 在 ios9 引入了 stackview,使用它可以减少约束的数量,让使用 autolayout 更加容易。但有一种边界使用场景是需要自定义视图之间的间隙。这种情况可以使用嵌套布局的方

引言

apple 在 ios9 引入了 stackview,使用它可以减少约束的数量,让使用 autolayout 更加容易。但有一种边界使用场景是需要自定义视图之间的间隙。这种情况可以使用嵌套布局的方式来解决,但解决方案有些复杂。在 ios 11 中给出了解决方案,你可以在 stackview 中自定义视图之间的间隙。

问题描述

这是我想创建的布局:

如图所示,共有5个 label。最上面的大字 label,中间三个标准 label,以及最下面的小字 label。中间三个 label 的间隙是 8pt,最上面和最下面的两个 label 的间隙是 32pt。

uistackview 在相等距离垂直分配视图的情况下工作的很好。通过设置 stackview 的间隙属性,每个子视图的间隙是相等的。

stacking stacks

使用内嵌 stackview 的方式实现布局。

inner stackview 包含三个 label,8pt 的间隙,外部 stackview 有 32pt 的间隙。这看起来能工作,实则可能是引入了麻烦。比如我想 header 和 footer 的间隙不一样,这就很麻烦。

自定义间隙(ios 11)

在 ios 11中,给某个 stackview 中的元素自定义间隙成为可能。假设我们已经构建好一个 stackview:

let stackview = uistackview(arrangedsubviews: [headerlabel, toplabel, middlelabel, bottomlabel, footerlabel])
stackview.axis = .vertical
stackview.alignment = .fill
stackview.spacing = 8.0

stackview 中的每个元素间隙是8pt。想要自定义header 标签和 footer 标签的间隙,可以直接调用 ios11 的方法设置:

// ios 11 only
stackview.setcustomspacing(32.0, after: headerlabel)
stackview.setcustomspacing(32.0, after: bottomlabel

说明:

  • 你可以指定某个 stackview 子元素之后的间隙,但是目前没有方法指定之前的间隙。
  • 在 interbuilder 中,你无法设置自定义间隙。只能在代码中完成。
  • 当你 从 stackview 中移除元素,系统自动移除自定义间隙。

标准间隙和默认间隙

uistackview 在 ios 11中增加了两个新属性,定义了系统间隙和默认间隙的值:

class let spacingusedefault: cgfloat
class let spacingusesystem: cgfloat

这两个属性的值是由系统保存和定义的,使用的时候不要直接保存他们的返回值。系统间隙似乎返回8pt,还是再强调一下,使用的时候应该直接访问这两个属性而不是保存他们的值。

你可以用这两个属性设置或者恢复自定义的间隙。

将系统间隙的值设置给最上面的 label:

stackview.setcustomspacing(uistackview.spacingusesystem, after: toplabel)

恢复 stackview 元素的间隙(移除自定义的间隙):

stackview.setcustomspacing(uistackview.spacingusedefault, after: toplabel)

译者注:

在设置了 stackview 的 spacing 值为5,设置 customspacing 的值为10,然后界面调整了,想把自定义间隙恢复为5,那么这时只能调用 setcustomspacing 将值设置为 spacingusedefault,如果设置为0,将干掉所有的间隙。这是我理解的 spacingusedefault 使用场景。

翻译自:https://useyourloaf.com/blog/...

以上就是stack view自定义间隙减少约束的数量的详细内容,更多关于stack view自定义间隙的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com