IOS cotrols隐藏起来就像android一样

时间:2014-03-28 06:01:02

标签: android objective-c swift xcode autolayout

我在自己的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 行为我已经从谷歌搜索但我无法找到解决方案。

4 个答案:

答案 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

可能会帮助你,否则你可以问我。