包含textfield数组的Stackview嵌入在scrollview中。我想在某些操作上更改文本字段的顺序。删除和添加文本字段的方式会导致视图失真。我还通过从scrollview中删除来测试。正常的堆栈视图也没有正确显示交换。我正在使用索引来改变:
stackView.removeArrangedSubview(localityTF)
stackView.insertArrangedSubview(localityTF, at: 2)
这是一个奇怪的行为,但自动布局系统的问题,应该更新,然后才能添加localityTF。另外不要忘记removeArrangedSubview
不会从子视图数组中删除视图:
[self.stackView removeArrangedSubview:_label1];
[self.stackView setNeedsLayout];
[self.stackView layoutIfNeeded];
[self.stackView insertArrangedSubview:_label1 atIndex:2];
[self.stackView setNeedsLayout];
这是我在Swift 3中的解决方案。它也可以在不定义stackview中的视图的情况下使用。
这里我用两个视图更改Stackview视图的位置:
if let myView = stackView.subviews.first {
stackView.removeArrangedSubview(myView)
stackView.setNeedsLayout()
stackView.layoutIfNeeded()
stackView.insertArrangedSubview(myView, at: 1)
stackView.setNeedsLayout()
}
尝试使用这一堆代码来替换UIStackView中的视图,而无需刷新任何布局。
if let objView = stackView.arrangedSubviews.first {
objView.removeFromSuperview()
}
stackView.insertArrangedSubview(yourView, at: 0)