Ios 如何隐藏或删除ui组件,并移动其他组件以占用隐藏或删除组件的空间?

Ios 如何隐藏或删除ui组件,并移动其他组件以占用隐藏或删除组件的空间?,ios,swift,uistoryboard,Ios,Swift,Uistoryboard,我在我的故事板中有一个带有标签、文本字段和按钮的视图,我希望当我点击按钮时,一些文本字段和标签会消失,在Swift中我可以使用 self.btnLoginFB.hidden = true self.btnLoginFB.removeFromSuperview() 但是,如果我隐藏该字段,空间将继续被占用,如果我尝试删除,所有其他组件将转到故事板之外的另一个空间 请我需要帮助,在html中隐藏div就足够了,但在故事板中我不知道:( 感谢您的帮助。假设您使用的是自动布局,那么正如您所注意到的,隐

我在我的故事板中有一个带有标签、文本字段和按钮的视图,我希望当我点击按钮时,一些文本字段和标签会消失,在Swift中我可以使用

self.btnLoginFB.hidden = true
self.btnLoginFB.removeFromSuperview()
但是,如果我隐藏该字段,空间将继续被占用,如果我尝试删除,所有其他组件将转到故事板之外的另一个空间

请我需要帮助,在html中隐藏div就足够了,但在故事板中我不知道:(


感谢您的帮助。

假设您使用的是自动布局,那么正如您所注意到的,隐藏字段将不会填充它所在的空间。该空间将保持空闲。从superview中删除将导致各种不稳定的情况发生

下面是我完成此任务的方法,设置要用Autolayout正确填充空间的视图(即,如果视图A位于视图B上方,则将视图B的顶部设置为与视图A的底部相距x边距)。然后,您可以隐藏视图或不隐藏视图(通常出于理智考虑),最重要的部分是将视图A的高度设置为0。我通常通过操纵视图A的高度约束上的常数来实现这一点,但也可以显式地将高度更改为0,只要高度变为0

如果您正确设置自动布局,这将正确地将任何视图移动到上方或下方以填充空间,具体取决于您如何将视图彼此关联。如果您有任何问题,请告诉我

编辑:所以如果我知道要隐藏约束,我通常会保留高度约束的属性,所以我通常会这样做(用于隐藏视图a):

要仅更改高度,请执行以下操作:

viewA.hidden = YES;
CGRect newFrame = viewA.frame;
newFrame.size.height = 0;
viewA.frame = newFrame;
[viewA setNeedsDisplay];
调用
setNeedsDisplay
可能是无关的,但我并没有实际构建它,所以我不确定,我认为您在场景1中需要它,而在场景2中不需要它


此外,要使这些视图像这样开箱即用,您需要确保将视图B设置为固定到视图A的上边缘或下边缘,这样它将自动填充留下的空间。如果您不使用Autolayout,您需要自己计算视图B的正确帧,并在隐藏视图A后进行设置。

是否可以显示我举一个例子,因为我正在尝试你所说的,但它不起作用。我只是更新了我的答案,以包含两种方式的一些代码片段。如果你有任何其他问题,请告诉我!你也可以在UIView动画块中调用
setNeedsLayout
,以设置更改的动画。一点视觉天赋可以对用户有很大帮助!如果你如果目标是iOS 9,则您可能可以使用UIStackView;当元素隐藏时,它们会自动调整,否则您需要操纵约束以使隐藏项的高度为零。您正在使用自动布局吗?谢谢,使用UIStackView它是固定的。Paulw11
viewA.hidden = YES;
CGRect newFrame = viewA.frame;
newFrame.size.height = 0;
viewA.frame = newFrame;
[viewA setNeedsDisplay];