iOS for Android View.GONE setVisibility 模式

标签 ios objective-c

我在 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 提供足够的数据来计算未知值。

让我们考虑一下,

enter image description here

正如你所看到的,粉色 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

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/

相关文章:

ios - swift 3 : Can not convert value of type 'int' to expected argument type 'DispatchQueue.GlobalQueuePriority'

iphone - 基于属性加载 View 的背景图像

iphone - 如何设置一个 bool 值,使其在 ViewDidLoad 中不一定为真但又不默认为假?

iphone - UIView层次结构

ios - 使用 CGPath 为笔划末端设置动画颜色

ios - 具有多个部分的 UITableView 负载不稳定

ios - FireBase - Observer Remove Child at specific path 没有被调用

ios - 从 cocoa pod 导入模块有错误,但仍然能够构建项目

iphone - 使用 AppDelegate 共享数据

ios - 如何使用 XMPPFramework 发送和接收消息