iOS Swift - 如何隐藏一个UIView元素并占用空间?

5

我是一名Android背景下的iOS新手。

在一个UIView上应用.hidden = true时,它虽然被隐藏了,但仍然占据着空间。是否有一种方法可以在视图消失时收回这个空间(类似于Android中的setVisibility(View.GONE))?

谢谢

2个回答

14
如果您的目标是 iOS 9 或更高版本,您可以使用 UIStackView 自动完成此操作(类似于 Android 上的 LinearLayout)。当您将包含在 UIStackView 中的视图设置为隐藏时,剩余的视图将移动以重新获取空间。

您可以通过在动画块中使用 view.hidden = true 来使移动过程动画化。

UIView.animateWithDuration(_:delay:options:animations:completion:)
或类似物品。
如果您的目标是低于9版本的iOS(其中不支持UIStackView),则必须在隐藏或显示视图时手动更新自动布局约束。
例如,假设您有3个堆叠在一起的视图,称为view1、view2和view3,您首先通过调用删除view2和view3的顶部约束。
view2TopConstraint.active = false
view3TopConstraint.active = false

然后在view3上添加一个顶部约束,该约束固定在view1的底部

let newView2TopConstraint = NSLayoutConstraint(item: view3, attribute: .Top, relatedBy: .Equal, toItem: view1, attribute: .Bottom, multiplier: 1.0, constant: 0.0)
newView2TopConstraint.active = true

有很多方法可以实现这一点,这只是一个例子。


1
如果我能给你+2,我会的,相信我 :) 谢谢,这解决了我的问题。 - Kevin Cittadini
我们能否在不使用StackView的情况下完成这个任务? - pankaj nigam

-2

没有可见性设置。但是您可以将 alpha 设置为 0。


1
这并不意味着它占用了空间,它仍然会占用空间。 - Hellojeffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接