2017-10-05 106 views
0

有沒有什麼辦法可以停止動畫的方法insertSegment(withTitle:at:animated)?即使我設置animated:false段動畫,看看這個:如何停止UISegmentedControl段動畫

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一個非常沉重的解決方案......

該項目採用雨燕3.1。

謝謝。

+0

你可以分享一個示例項目嗎? –

+0

@Pedro Paulo Amorim:你如何在代碼中設置約束? –

+0

@Puneet莎瑪我解決了這個問題,這與約束動畫有關。我現在會發布答案。 –

回答

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) 

這個正確的解決方法是要避免的約束的生成過程中的任何動畫。