2015-11-17 68 views
0

我有一個基於Swift 2.0(和自動佈局)的項目。我正嘗試用簡單的擴展器控件構建視圖控制器。用戶點擊標題位,即可顯示選項表。UITableViewCell在展示過程中有不一致的UIView動畫

它的工作原理,但最初的揭示有一點點奇怪。用戶第一次點擊它按預期擴展的標題,但表格內容從左側輕微滑入。在隨後的點擊中,它沒有這種額外的動畫。

如果可以,我想消除這種輕微的「滑入」。然而,我對這一點已經足夠新了,以至於我不完全明白我做錯了什麼。搜索谷歌和SO已被證明令人沮喪。我不認爲我知道正確的術語來解釋發生了什麼。

我已經包含示例代碼,說明我在做什麼。我還包括一個動畫,以便您可以看到發生了什麼。謝謝!

代碼:

import UIKit 

class ViewController: UIViewController, UITableViewDataSource { 
    @IBOutlet weak var tableViewHeight: NSLayoutConstraint! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     tableViewHeight.constant = 0 
    } 

    @IBAction func openTable(sender: AnyObject) { 
     if tableViewHeight.constant == 0 { 
      tableViewHeight.constant = 220 
     } else { 
      tableViewHeight.constant = 0 
     } 

     UIView.animateWithDuration(0.3, animations: { 
      self.view.layoutIfNeeded() 
     }) 
    } 

    // MARK: tableView stuff 
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 3 } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = UITableViewCell() 
     cell.textLabel?.text = "Cell \(indexPath.item)" 
     return cell 
    } 

} 

圖片:

UITableView errant slide in

回答

1

你應該嘗試一下本作製作的細胞顯示之前佈局,避免怪異的效果。

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = // get your cell for indexPath here 
     cell.layoutIfNeeded() 
    } 
+0

所以這主要回答了我的問題。我所做的是在layoutIfNeeded調用之前使用UIView.setAnimationsEnabled(false)禁用UIView動畫,然後再打開它們。 – hernan43

+0

@ hernan43很樂意幫忙。 – glm4