OStack程序员社区-中国程序员成长平台

标题: iOS for Android View.GONE setVisibility 模式 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 23:02
标题: iOS for Android View.GONE setVisibility 模式

我在 UI 设计中使用了带有自动布局的 Storyboard 。基本上在 android 中会有三个不同的属性,比如 Visible 和 Invisible 和消失。

例如:

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



Best Answer-推荐答案


辛,

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

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

它有什么意义?

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

让我们考虑一下,

enter image description here

正如您所见,粉红色 View 与绿色 View 的水平间距是固定的,因此 iOS 会根据绿色 View 的 maxX 位置 + 绿色和粉红色 View 之间的水平间距来计算粉红色 View 的 x 位置

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

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

你可以!!只是实际上

怎么做??

两种方式:

方式 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

enter image description here

我希望你在这里看到的,现在我知道如果我删除 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4