RemoveArrangedSubviewで:
スタックのremoveArrangedSubview:メソッドを呼び出した後にビューが画面に表示されないようにするには、ビューのremoveFromSuperviewメソッドを呼び出して、サブビュー配列からビューを明示的に削除します。
ArrangedSubviewで:
配置されたビューのremoveFromSuperviewメソッドが呼び出されるたびに、スタックビューは、arrangedSubview配列からビューを削除します
これらから、removeFromSuperviewを呼び出すだけでサブビューを削除するのに十分であるようで、問題なくそのように使用しています。また、removeFromSuperviewが呼び出されたときに、arrangedSubviews配列のカウントを記録することで、動作を確認しました。
ただし、S/Oに関する多くのチュートリアルとコメントは、両方を呼び出すように言っています。これには理由がありますか?それとも、ドキュメントがそう言っているので、人々はそれをしますか?
いいえ、subview.removeFromSuperView()
を呼び出すだけです
/* 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)
IOS 12.0では、使用する必要があります
_stackView.arrangedSubviews[index].removeFromSuperview()
_
removeArrangedSubview
を使用すると、指定されたインデックスのビューが削除されるバグがありますが、CGPoint(x: 0, y: 0)
にクリアしたいビューが表示されます。
これが誰かを助けることを願っています。
Swiftでのハッキングは、この場合はWebビューを使用して、かなり良い例と説明を提供します。
その理由は、スタックビューの配置されたサブビューリストから何かを削除して、後で再追加することができ、そのたびに再作成する必要がないためです。メモリリークは望ましくないため、削除されたWebビューを完全に削除します。メモリ使用量のバルーニングが見つかった場合は、おそらくこの手順を忘れてしまったでしょう!
そのとおりです。ビューを完全に削除するには、removeFromSuperview
を呼び出すだけで十分です。
両方を置く人がいる理由は、両方が必要であると思われるremoveArrangedSubview
のドキュメントにまたがっているからだと思う。 (実際、removeArrangedSubview
を呼び出してビューを本当に表示したい場合は、そうです。)
arrangedSubviews
の追加のドキュメントはあまり多く見られないので、removeArrangedSubview
がこの場合はオプションであることに気付きません。
スタックビューからarrangedSubviewを削除するには
// Remove it from the stack view
stackView.removeArrangedSubview(subView)
// now remove it from the view hierarchy – this is important!
subView.removeFromSuperview()