Stackview交换或更改观看顺序

时间:2016-12-26 04:48:15

标签: ios uiview autolayout uistackview stackview

包含textfield数组的Stackview嵌入在scrollview中。我想在某些操作上更改文本字段的顺序。删除和添加文本字段的方式会导致视图失真。我还通过从scrollview中删除来测试。正常的堆栈视图也没有正确显示交换。我正在使用索引进行更改:

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

3 个答案:

答案 0 :(得分:12)

这是一种奇怪的行为,但是自动布局系统存在问题,应该先更新,然后再添加localityTF。另请注意,removeArrangedSubview不会从子视图数组中删除视图:

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

[self.stackView insertArrangedSubview:_label1 atIndex:2];   
[self.stackView setNeedsLayout];

答案 1 :(得分:2)

这是我在 Swift 3 中的解决方案。也可以使用而不在stackview中定义视图。

在这里,我使用两个视图更改Stackview的视图位置:

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

    stackView.insertArrangedSubview(myView, at: 1)
    stackView.setNeedsLayout()
}

答案 2 :(得分:1)

尝试使用这些代码替换 UIStackView 中的视图,而无需刷新任何布局。

if let objView = stackView.arrangedSubviews.first {
        objView.removeFromSuperview()
}
stackView.insertArrangedSubview(yourView, at: 0)