在removeArrangedSubview中:
要在调用堆栈的removeArrangedSubview:方法后阻止视图出现在屏幕上,请通过调用视图的removeFromSuperview方法显式删除子视图数组中的视图.
在安排的子视图中:
每当调用排列视图的removeFromSuperview方法时,堆栈视图就会从其arrangeSubview数组中删除视图
从这些看来,调用removeFromSuperview似乎足以删除子视图,我一直在使用它,没有问题.我还通过在调用removeFromSuperview时记录arrangeSubviews数组的计数来确认行为.
这里有很多关于S/O的教程和评论,比如说两者都叫.是否有一个原因?或者人们只是这样做,因为文档是这样说的?
小智 62
不,只是打电话 subview.removeFromSuperview()
Run Code Online (Sandbox Code Playgroud)/* Removes a subview from the list of arranged subviews without removing it as a subview of the receiver. To remove the view as a subview, send it -removeFromSuperview as usual; the relevant UIStackView will remove it from its arrangedSubviews list automatically. */ open func removeArrangedSubview(_ view: UIView)
Cha*_*ong 23
在iOS 12.0中,您需要使用
stackView.arrangedSubviews[index].removeFromSuperview()
Run Code Online (Sandbox Code Playgroud)
如果您使用removeArrangedSubview,则会删除指定索引处的视图,但我想要清除的视图出现的错误CGPoint(x: 0, y: 0).
希望这能有所帮助.
Aju*_*mal 10
从堆栈视图中删除排列的子视图是
// To remove it from the view hierarchy
subView.removeFromSuperview()
Run Code Online (Sandbox Code Playgroud)
Hacking使用Swift提供了一个非常好的示例和解释,在这种情况下使用Web视图.
原因是您可以从堆栈视图的已排列子视图列表中删除某些内容,然后在以后重新添加它,而不必每次都重新添加它 - 它被隐藏,而不是被销毁.我们不希望内存泄漏,因此我们希望完全删除已删除的Web视图.如果你发现你的内存使用不断膨胀,你可能会忘记这一步!
你是对的,只要调用removeFromSuperview就足以让视图完全删除.
我怀疑人们放两者的原因是因为他们遇到的removeArrangedSubview文件似乎都说需要.(事实上,他们是,如果你打电话,removeArrangedSubview并希望视图真的消失.)
arrangedSubviews很多人都没有看到附加的文档,所以他们没有意识到removeArrangedSubview,在这种情况下,是可选的.
否,要删除特定视图。
func removeArrangedSubview(_ view: UIView)
Run Code Online (Sandbox Code Playgroud)
删除所有子视图
stackView.arrangedSubviews.forEach { $0.removeFromSuperview() }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18676 次 |
| 最近记录: |