【问题标题】:How to stop UISegmentedControl segments animation如何停止 UISegmentedControl 分段动画
【发布时间】:2017-10-05 09:31:01
【问题描述】:

有什么方法可以停止方法insertSegment(withTitle:at:animated)的动画吗?即使我设置animated:false 段动画,看看这个:

请忽略红球。

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

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: ["", "", ""]) 开始视图是否会替换整个组件,顺便说一句,这是一个非常重要的解决方案...

项目使用 Swift 3.1。

谢谢。

【问题讨论】:

  • 你能分享一个示例项目吗?
  • @Pedro Paulo Amorim:你是如何在代码中设置约束的?
  • @Puneet Shama 我解决了这个问题,这与约束动画有关。我现在会发布答案。

标签: ios swift xcode uisegmentedcontrol ios-autolayout


【解决方案1】:

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

删除此动画解决了问题:

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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-27
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多