给定一个stackView对象,我得到了一个stackView.arrangedSubviews
数组
这是一个唯一的财产。因此,我只能通过
stackView.arrangedSubviews[i] = newSubView
我想到的是想要将stackView.arrangedSubviews[i]
的引用内容替换为newSubView的内容。例如,如果这是在C中,我会做类似
*arrangedSubViews[i] = *newSubView
我知道有一种方法可以通过删除arrangeSubViews并使用addArrangedSubView来完成我需要的工作,但它不会非常有效。
答案 0 :(得分:0)
你无法修改不可变数组,这在很多方面都是好事。
您可以创建一个扩展方法来替换这样的视图:
@available(iOS 9.0, *)
extension UIStackView {
func replaceView(atIndex index: Int, withView view: UIView) {
let viewToRemove = arrangedSubviews[index]
removeArrangedSubview(viewToRemove)
insertArrangedSubview(view, atIndex: index)
}
}
然后,您可以使用此代码代替stackView.arrangedSubviews[i] = newSubView
:
stackView.replaceView(atIndex: i, withView: newSubView)
在表现方面,这样做没有任何负面影响。