我在自己的UI设计中使用了自动布局的故事板。基本上在Android中有三种不同的属性,如可见,不可见和消失。
例如:
1) android:visibility="gone" // used to hide the control and as well as space
(or)
CONTROLNAME.setVisibility(View.GONE);
2) android:visibility="invisible" // used to hide the control but it will take space
(or)
CONTROLNAME.setVisibility(View.INVISIBLE);
在IOS中,
目标c
1) ?
2) [CONTROLNAME setHidden:TRUE]; // used to hide the control but it will take space
迅速
1) ?
2) CONTROLNAME.isHidden = true // used to hide the control but it will take space
在IOS中作为 Gone 行为我已经从谷歌搜索但我无法找到解决方案。
答案 0 :(得分:3)
要删除视图(控件)占用的空间,可以将其框架的size
减少为零,也可以将其从视图层次结构中删除。即通过在控件上调用removeFromSuperview
。
例如,如果您必须删除UITextField
占据的空间(比如说CONTROLNAME
),那么您可以使用:
CGRect tempFrame = CONTROLNAME.frame;
CGSize currentSize = tempFrame.size; //for later use
tempFrame.size = CGSizeZero;
CONTROLNAME.frame = tempFrame;
或
CGRect currentFrame = CONTROLNAME.frame; //for later use
[CONTROLNAME removeFromSuperview];
<强>更新强>
在第一种情况下,您必须存储较早的大小以将控件恢复到其初始位置。
CGRect tempFrame = CONTROLNAME.frame;
tempFrame.size = currentSize; //set to initial value
CONTROLNAME.frame = tempFrame;
在第二种情况下,您必须存储控件的帧以将其恢复到其初始位置(如果它是局部变量或弱实例变量,则还包括控件本身)。
CONTROLNAME.frame = currentFrame;
答案 1 :(得分:2)
如果您的观点为例
@property (weak, nonatomic) IBOutlet SearchBarView *searchBar;
已经有了约束。通过将约束拖动到.h file.ex:
添加新的IBLayout@property (weak, nonatomic) IBOutlet NSLayoutConstraint *constraintSearBarHeight;
并在您喜欢的地方执行此操作
self.constraintSearBarHeight.constant = 0;
如果您的视图还没有约束。我发现this answer很有帮助。只需在下面
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.searchBar attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:0]];
答案 2 :(得分:1)
既不删除子视图,也不调整框架对我有用,所以作为替代解决方案,我以编程方式添加了一个自动调整差异的约束。
例如:如果你有3个视图,A_view B_view和C_view按顺序垂直对齐,你想要&#34;隐藏&#34; B也调整差异,添加约束
B_view.removeFromSuperView()
var constr = NSLayoutConstraint(item: C_view,
attribute: NSLayoutAttribute.Top,
relatedBy: NSLayoutRelation.Equal,
toItem: A_view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: 20)
view.addConstraint(constr)
常量是(在这种情况下)C_view和A_view之间的垂直空间量
它对我有用,但需要知识约束
答案 3 :(得分:0)
您应该为三个子视图中的每一个创建IBOutlets。然后,您可以直接从这些引用中显示/隐藏它们中的每一个。如果隐藏视图,它将自动隐藏其子视图。
@IBOutlet var yourStackView: UIStackView! yourStackView.hidden = true;
另一种解决方案:
如果您有每个视图的标签,您可以使用以下方式隐藏和显示它们:
目标C
隐藏:
[[self.view viewWithTag:1] setHidden:YES];
显示:
[[self.view viewWithTag:1] setHidden:NO];
在斯威夫特:
隐藏:
self.view.viewWithTag(1)?.hidden = true
显示:
self.view.viewWithTag(1)?.hidden = false
可能会帮助你,否则你可以问我。