21

テキストフィールドの配列を含むスタックビューがスクロールビューに埋め込まれています。一部のアクションでテキスト フィールドの順序を変更したいと考えています。テキストフィールドを削除して追加する方法により、ビューが歪んでしまいます。また、スクロールビューから削除してテストしました。通常のスタックビューも取引所が正しく表示されません。インデックスを使用して変更しています:


stackView.removeArrangedSubview(localityTF) stackView.insertArrangedSubview(localityTF, at: 2)

4

5 に答える 5

30

これは奇妙な動作ですが、localityTF を追加する前に更新する必要がある自動レイアウト システムの問題です。removeArrangedSubviewまた、サブビュー配列からビューを削除しないことを忘れないでください:

[self.stackView removeArrangedSubview:_label1];
[self.stackView setNeedsLayout];
[self.stackView layoutIfNeeded];

[self.stackView insertArrangedSubview:_label1 atIndex:2];   
[self.stackView setNeedsLayout];
于 2016-12-26T07:23:12.857 に答える
7

これはSwift 3での私のソリューションです。スタックビューでビューを定義せずに使用することもできます。

ここでは、2 つのビューを持つ Stackview のビューの場所を変更しています。

if let myView = stackView.subviews.first {
    stackView.removeArrangedSubview(myView)
    stackView.setNeedsLayout()
    stackView.layoutIfNeeded()

    stackView.insertArrangedSubview(myView, at: 1)
    stackView.setNeedsLayout()
}
于 2018-07-13T08:35:21.083 に答える
0

このソリューションは完全に機能します。毎回呼び出すと、最初のスタック要素ビューが最後のスタック要素ビューに変更され、その逆も同様です。

  if let first = stackView.subviews.first, let last = stackView.subviews.last {
    stackView.subviews.forEach { $0.removeFromSuperview() }
    stackView.insertArrangedSubview(last, at: 0)
    stackView.insertArrangedSubview(first, at: 1)
    stackView.setNeedsLayout()
    stackView.layoutIfNeeded()
  }
于 2021-11-04T20:39:26.593 に答える