我在 UI 设计中使用了带有自动布局的 Storyboard。基本上在 android 中会有三种不同的属性,例如可见、不可见和消失。
例如:
1) 安卓
mTextView = (TextView) findViewById(R.id.textview);
mTextView.setVisibility(View.GONE);
2) objective-c
UIView *a = [self.view viewWithTag:2]
I want to process View.GONE...
对于IOS中的角色,我已经从谷歌搜索过,但找不到解决方案。
最佳答案
辛,
Android 不使用自动布局来计算 View 组件的框架,并且像 CSS(层叠样式表)一样,它使用 View 组件相对于父 View 、边距或其他对等 View 的相对值来计算 View 的位置。
但是在 iOS 中,当你使用自动布局时,你定义数学表达式的约束,iOS 评估它们以找到各种组件框架的实际值:)
它的意义是什么?
由于自动布局约束是数学表达式,因此您必须向 iOS 提供足够的数据来计算未知值。
让我们考虑一下,
正如你所看到的,粉色 View 与绿色 View 之间有固定的水平间距,因此 iOS 根据绿色 View 的 maxX 位置 + 绿色和粉色 View 之间的水平间距来计算粉色 View 的 x 位置:)
现在假设你在绿色 View 上调用 view.GONE 并完全删除绿色 View ,现在 iOS 会感到困惑,因为它不知道粉红色 View 的 x 位置是什么,现在它没有足够的数据来计算 x粉红色 View 的位置:)
这是否意味着我永远无法在 iOS 中实现 View.GONE ?
你可以!!虽然只是虚拟的:P
如何?
两种方式:
方式1
您无法删除 View ,因为这将导致它留下依赖于它的所有其他 View ,以进行未处理的帧计算。因此考虑将 View 的宽度和高度约束常量值设置为“0”
向要隐藏的 View 添加高度和宽度约束,并为高度和宽度约束创建 IBOutlet。
现在,当您想隐藏时,只需说:
self.greenViewHeightConstraint.constant = 0
self.greenViewWidthConstraint.constant = 0
self.view.layoutIfNeeded()
是啊!!!现在你有一个宽度和高度为0的 View ,我的意思是 View 存在但不存在!!
方式2
但是,你确实没有使用方法 1 删除它,是吗???没有。您实际上可以使用方式 2 删除 View
我想让你在这里看到的是,现在我知道,如果我删除 View1, View 2 无法计算其 x 位置,因此我创建了一个从 View2 到父级左边距的前导约束,并将其优先级设置为高并设置它的常数为 0:)
现在这个约束不会发挥作用,只要所需的(1000)约束足以计算值,现在假设您删除 View 1, View 2的框架无法使用所需的约束来计算,因此约束很高开始运行,它说你的粉红色 View 应该距 parent 左边距 0 像素:)
是的:)你实现了你想要的,现在你实际上删除了绿色 View 和粉红色 View 仍然没有丢失它的框架:)
你到底是怎么去掉绿色 View 的?
这不是问题吗?抱歉,我得意忘形了:)
你可以说self.greenView.removeFromSuperview()
关于iOS for Android View.GONE setVisibility 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41015078/