如何停止UISegmentedControl段动画

时间:2017-10-05 09:31:02

标签: ios swift xcode uisegmentedcontrol ios-autolayout

有没有办法停止方法insertSegment(withTitle:at:animated)的动画?即使我将animated:false段设置为动画,请查看:

Animated gif of the bug

请忽略红球。

我用来创建组件的代码是:

let segmentedControl = UISegmentedControl()
segmentedControl.sendActions(for: UIControlEvents.valueChanged)
segmentedControl.tintColor = UIColor.white
segmentedControl.selectedSegmentIndex = 0
view.addSubview(segmentedControl)

约束设置正常,帧宽(100% - 两侧16像素)始终相同。问题与段有关,而不是父视图。

添加细分(在设置检查后会发生这种情况):

segmentedControl.insertSegment(withTitle: "Bolinha 1", at: 0, animated: false)

设置框架不起作用,因为问题与内部视图有关。

我尝试使用setAnimationsEnabled(false)删除它但不起作用。

编辑1:使用segmentedControl.setWidth(segmentedControl.frame.width/3, forSegmentAt: 0)不起作用。

编辑2:使用UISegmentedControl(items: ["", "", ""])启动视图会替换整个组件,这对于解决此问题非常重要... btw ...

该项目使用Swift 3.1。

谢谢。

1 个答案:

答案 0 :(得分:0)

我发现动画修改了内部组件的行为。

删除此动画解决了问题:

view.setNeedsUpdateConstraints()
view.updateConstraintsIfNeeded()

UIView.animate(
  withDuration: 0.5,
  delay: 0.5,
  usingSpringWithDamping: 1.0,
  initialSpringVelocity: 2,
  animations: { [weak self] in
    self?.view.layoutIfNeeded()
  }, completion: nil)

正确的解决方案是在构建约束期间避​​免任何动画。