菜鸟教程小白 发表于 2022-12-12 23:02:27

iOS for Android View.GONE setVisibility 模式


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

<p><strong>例如:</strong></p>

<p>1) 安卓</p>

<pre><code> mTextView = (TextView) findViewById(R.id.textview);
mTextView.setVisibility(View.GONE);
</code></pre>

<p>2)Objective-C </p>

<pre><code> UIView *a =
I want to process View.GONE...
</code></pre>

<p>作为 IOS 我已经从谷歌搜索但我无法找到解决方案。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>辛,</p>

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

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

<p><strong>它有什么意义?</strong></p>

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

<p>让我们考虑一下,</p>

<p> <a href="/image/6ftFA.png" rel="noreferrer noopener nofollow"><img src="/image/6ftFA.png" alt="enter image description here"/></a> </p>

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

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

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

<p>你可以!!只是实际上:P</p>

<p><strong>怎么做??</strong></p>

<p>两种方式:</p>

<p><strong>方式 1</strong></p>

<p>您不能删除 View ,因为这将导致它离开所有其他 View ,这取决于它的框架计算未处理。因此考虑将 View 的宽度和高度约束的常量值设置为“0”</p>

<p>为要隐藏的 View 添加高度和宽度约束,并为高度和宽度约束创建一个 IBOutlet。</p>

<p>现在当你想隐藏时,简单地说,</p>

<pre><code>self.greenViewHeightConstraint.constant = 0
self.greenViewWidthConstraint.constant = 0
self.view.layoutIfNeeded()
</code></pre>

<p>是啊!!!现在你有一个宽度和高度为 0 的 View ,我的意思是 View 存在但不存在!</p>

<p><strong>方式 2</strong></p>

<p>但是,您确实使用方法 1 将其删除,对吗?没有。您实际上可以使用方式 2 删除 View </p>

<p> <a href="/image/m9oq9.png" rel="noreferrer noopener nofollow"><img src="/image/m9oq9.png" alt="enter image description here"/></a> </p>

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

<p>现在这个约束不会发挥作用,只要所需的(1000)个约束足以计算值,现在假设您删除 View1, View2 的帧不能用必需的约束来计算,因此是高约束开始,它说你的粉红色 View 应该距离 parent 左边距 0 像素:)</p>

<p>是的 :) 你实现了你想要的,现在你实际上移除了绿色 View 和粉红色 View 仍然没有丢失它的框架:)</p>

<p><strong>你到底是如何移除绿色 View 的??</strong></p>

<p>这不是问题吗?对不起,我走神了:)</p>

<p>你可以说<code>self.greenView.removeFromSuperview()</code></p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS for Android View.GONE setVisibility 模式,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41015078/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41015078/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS for Android View.GONE setVisibility 模式