iOS for Android View.GONE setVisibility模式

时间:2016-12-07 10:31:21

标签: ios objective-c

我在自己的UI设计中使用了自动布局的故事板。基本上在android中有三种不同的属性,如Visible和Invisible,并且不见了。

例如:

1)Android

 mTextView = (TextView) findViewById(R.id.textview);
 mTextView.setVisibility(View.GONE);

2)目标C

 UIView *a = [self.view viewWithTag:2]
 I want to process View.GONE...

对于IOS中的行为我已经从谷歌搜索但我无法找到解决方案。

3 个答案:

答案 0 :(得分:1)

经过一些谷歌搜索,我发现了这个:

View.GONE - 此视图不可见,并且不会占用任何空间进行布局。

View.INVISIBLE - 此视图不可见,但仍会占用空间以进行布局。

它在ios中的等价物是:

View.GONE - 卸载视图。这可以从故事板中完成,如下图所示。您必须取消选中Installed的复选框 enter image description here

View.INVISIBLE - View.hidden = true;

答案 1 :(得分:1)

信,

Android不使用自动布局来计算视图组件的框架,并且像CSS(层叠样式表)一样,它使用视图组件相对于父视图,边框视图或其他对等视图的相对值来计算视图的位置。

但在iOS中,当你使用自动布局时,你定义了数学表达式的约束,iOS评估它们以找到各种组件的帧的实际值:)

什么意义呢?

由于自动布局约束是数学表达式,因此您必须为iOS提供足够的数据来计算未知值。

让我们考虑一下,

enter image description here

正如您所看到的,粉红色的视图与绿色视图具有固定的水平间距,因此iOS从绿色视图的maxX位置+绿色和粉红色视图之间的水平间距计算粉红色视图的x位置:)

现在假设您在绿色视图上调用view.GONE并完全删除绿色视图,现在iOS将会感到困惑,因为它不知道粉红色视图的x位置是什么,现在它没有足够的数据来计算x粉红色观点的位置:)

这是否意味着我永远无法在iOS中实现View.GONE?

你可以!!但实际上只是:P

如何??

两种方式:

方式1

您无法移除视图,因为这样会导致视图因为未处理的帧计算而离开所有其他视图。因此,考虑将视图的宽度和高度约束的常量值设置为" 0"

将高度和宽度约束添加到要隐藏的视图中,并根据高度和宽度约束创建IBOutlet。

现在当你想隐藏时,简单地说,

self.greenViewHeightConstraint.constant = 0
self.greenViewWidthConstraint.constant = 0
self.view.layoutIfNeeded()

呀!现在你有一个宽度和高度为0的视图,我的意思是视图存在但不存在!!

方式2

但是,然后,你真的使用方式1删除它吗?不。您实际上可以使用Way 2

删除视图

enter image description here

我希望你在这里看到,现在我知道如果我删除View1,视图2无法计算其x位置,所以我创建了一个从View2到Parent左边距的前导约束并将其优先级设置为高并设置它的常数为0:)

现在这个约束不会发挥作用,只要必需的(1000)约束足以计算值,现在假设您删除视图1,视图2的帧不能用所需的约束,因此高约束开始,它表示你的粉红色视图应该是父母左边距的0像素:)

是啊:)你实现了你想要的,现在你实际上删除了绿色视图和粉红色视图仍然没有丢失它的框架:))

你究竟是如何删除绿色视图的?

那不是问题吗?对不起,我被带走了:))

您可以说self.greenView.removeFromSuperview()

答案 2 :(得分:0)

在iOS上,visiblegone已完成hidden = NOhidden = YES

如果您希望隐身,请将视图alpha设置为0

编辑隐藏视图不会使布局层次结构忽略它,除非它位于堆栈视图中。