我向 TZStackView
(基本上与UIStackView
相同,但具备旧版本的回退功能)添加视图的代码如下:
stackView.addArrangedSubview(subview)
stackView
和subview
都是动态大小的(自动布局),并且可以调整自己的大小。但是,这种调整是通过动画实现的(我认为是由于addArrangedSubview
引起的,如果我将其作为子视图添加并设置约束,则不会发生这种情况)。有没有一种方法可以停用这些动画?
我向 TZStackView
(基本上与UIStackView
相同,但具备旧版本的回退功能)添加视图的代码如下:
stackView.addArrangedSubview(subview)
stackView
和subview
都是动态大小的(自动布局),并且可以调整自己的大小。但是,这种调整是通过动画实现的(我认为是由于addArrangedSubview
引起的,如果我将其作为子视图添加并设置约束,则不会发生这种情况)。有没有一种方法可以停用这些动画?
禁用动画时向UIStackView添加排列视图在iOS 9中无法正常工作。
解决方案是将添加操作与布局分开执行:
// Add all views first.
for view in views {
stackView.addArrangedSubview(view)
}
// Now force the layout in one hit, sans animation.
UIView.performWithoutAnimation {
stackView.setNeedsLayout()
stackView.layoutIfNeeded()
}
在iOS 9.3和Xcode 8.3.2上进行了测试。尚未在iOS 10或11上进行测试。
已在iOS11,Xcode 9.0 (9A235)上进行了测试
。 - DanielUIView performWithoutAnimation:会在没有动画的情况下执行其块参数:
UIView.performWithoutAnimation {
stackView.addArrangedSubview(subview)
}
performWithAnimation
,但我甚至不知道performWithoutAnimation
的存在,但不幸的是它并不起作用。 - DanielstackView.layoutIfNeeded()
或者你的 stack view 的 superviewlayoutIfNeeded()
吗?我的一个子视图仍在动画中。 - Clay Ellis