当前位置: 首页 > 知识库问答 >
问题:

带有隐藏UIViews的自动布局?

卢晟
2023-03-14

我觉得显示/隐藏UIViews是一个相当常见的范例,最常见的是UILabels,具体取决于业务逻辑。我的问题是,使用自动布局响应隐藏视图的最佳方式是什么,就好像它们的框架是0x0一样。这是一个1-3个功能的动态列表示例。

现在我有一个10px的顶部空间,从按钮到最后一个标签,当标签被隐藏时,它显然不会向上滑动。现在,我创建了这个约束的出口,并根据显示的标签数量修改常量。这显然有点麻烦,因为我使用负常量值将按钮推到隐藏帧上。这也很糟糕,因为它不受实际布局元素的限制,只是根据其他元素的已知高度/填充进行鬼鬼祟祟的静态计算,而且显然与AutoLayout的构建目的背道而驰。

显然,我可以根据我的动态标签创建新的约束,但这是大量的微观管理和大量的冗长,因为试图折叠一些空白。有更好的方法吗?更改框架大小0,0,让自动布局在不操纵约束的情况下完成它的工作?完全删除视图?

老实说,仅仅从隐藏视图的上下文中修改常量需要一行简单的计算代码。用重新创建新约束约束约束随项目:属性:相关由:toItem:属性:乘法器:常量:看起来太重了。

2018年2月编辑:使用UIStackViews查看Ben的答案

共有3个答案

西门良才
2023-03-14

UIStackView可能是iOS9的方法。它不仅处理隐藏视图,如果设置正确,它还将删除额外的行间距和边距。

东方谦
2023-03-14

隐藏时使用一个常数0,再次显示时使用另一个常数的解决方案是可行的,但如果内容的大小灵活,则不令人满意。你需要衡量你的灵活内容,并不断调整。这感觉是错误的,如果内容因服务器或UI事件而改变大小,就会出现问题。

我有一个更好的解决方案。

其思想是在隐藏元素时将高度为0的规则设置为具有高优先级,这样就不会占用自动布局空间。

你可以这样做:

1.在低优先级的接口生成器中设置宽度(或高度)为0。

界面构建器不会因为优先级低而对冲突大喊大叫。通过将优先级临时设置为 999 来测试高度行为(禁止以编程方式更改 1000,因此我们不会使用它)。界面构建器现在可能会大喊大叫冲突的约束。您可以通过将相关对象的优先级设置为 900 左右来解决这些问题。

2.添加插座,以便可以在代码中修改宽度约束的优先级:

3.隐藏元素时调整优先级:

cell.alertTimingView.hidden    = place.closingSoon != true
cell.alertTimingWidth.priority = place.closingSoon == true ? 250 : 999
严恩
2023-03-14

我个人对显示/隐藏视图的偏好是创建具有适当宽度或高度约束的IBOutlet。

然后,我将常量值更新为 0 以隐藏,或者将值更新为要显示的任何值。

这种技术的最大优点是可以保持相对约束。例如,假设视图A和视图B的水平间距为x。当视图A的宽度< code >常量设置为< code>0.f时,视图B将向左移动以填充该空间。

不需要添加或删除约束,这是一个重量级的操作。简单地更新约束的< code >常量就可以了。

 类似资料:
  • 问题内容: 我想要一个不会在单击时自动隐藏的MenuItem(更具体地说是CheckMenuItem)。我知道CustomMenuItem具有此功能,但它应该是CheckMenuItem。 问题答案: 在构造函数中使用CustomMenuItem,setHideOnClick和CheckBox。 编辑: 我只是注意到JavaFX 8u40中将其弄乱了。菜单项的文本颜色与背景颜色相同,因此看不到任何

  • 在我的UITableViewCell中,我有两个UIView堆叠在一起。让我们称之为顶部和底部。 俯视图对superview具有前导、尾随和顶部约束。它的高度约束为20。 底部视图对superview具有前导、尾随和底部约束。它的高度约束为20。 顶部和底部具有垂直约束。 以编程方式“隐藏”底部视图(并使顶部视图接触超级视图的底部)的最简单方法是什么?我不想再创建任何约束,因为我确实在情节提要中设

  • 所以我想做的是让我的主菜单浮动,但同时是可调整大小的(窗口宽度),我也有一个隐藏的子菜单,我希望它遵循主菜单的规则。 此外,主菜单并不是从页面的顶部开始,但当你向下滚动时,我希望它能贴在顶部边缘并在那里Rest。 jsFiddle在这里 CSS JAVASCRIPT(jQuery的什么版本?) HTML(固定HTML格式,删除额外标记,添加缺失标记)

  • 我试图创建一个滚动条隐藏的页面,但你仍然可以滚动或点击链接向下滚动。我可以隐藏滚动条,但我不能在100%上留下一页滚动。HTML CSS

  • 本文向大家介绍神奇的listView实现自动显示隐藏布局Android代码,包括了神奇的listView实现自动显示隐藏布局Android代码的使用技巧和注意事项,需要的朋友参考一下 借助View的OnTouchListener接口来监听listView的滑动,通过比较与上次坐标的大小,判断滑动方向,并通过滑动方向来判断是否需显示或者隐藏对应的布局,并且带有动画效果。 1.自动显示隐藏Toolba

  • 我看过一些样品,但没有一个适合我的需要。 我已经为动画创建了两个xml文件,但我不知道在更改的可见性时如何启动它们。