2017-04-12 127 views
0

我的滾動視圖具有包含大量組件的內容視圖,並且組件在單擊時呈現動畫效果。有一個問題,內容視圖不會正確更改大小。有沒有人有任何想法如何解決這個問題?滾動後面的contnent視圖的大小。這裏是描述代碼,我在做什麼:內容將視圖調整爲父滾動視圖

func updateDropDownList(tableView: UITableView, height: CGFloat, state: CGFloat) { 
     let rowHeight = tableView.rowHeight 
     UIView.animate(withDuration: 0.3, animations: { 
      var frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.width, height: height) 
      tableView.frame = frame 
      if state == -1 { 
       frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.width, height: CGFloat(tableView.numberOfRows(inSection: 0)) * rowHeight) 
      } 
      self.updatePositions(tableView: tableView, frame: frame, state: state, rowHeight: rowHeight) 
     }) 
    } 

狀態:

  1. 狀態= 1個//調整表視圖
  2. 狀態= -1 //回oryginal大小

和方法,其允許我改變各成分的位置:

func updatePositions(tableView: UITableView, frame: CGRect, state: CGFloat, rowHeight: CGFloat) { 
     switch tableView { 
     case facilitiesTableView: 
      statusLabel.frame.origin.y += state * (frame.height - rowHeight) 
      statusTableView.frame.origin.y += state * (frame.height - rowHeight) 
      serviceTableView.frame.origin.y += state * (frame.height - rowHeight) 
      vehiclesCollection.frame.origin.y += state * (frame.height - rowHeight) 
      colorsCollection.frame.origin.y += state * (frame.height - rowHeight) 
      scrollView.contentSize.height += state * colorsCollection.frame.height 
//   contentView.frame.size = CGSize(width: contentView.frame.size.width, height: scrollView.contentSize.height) 
     case statusTableView: 
      serviceTableView.frame.origin.y += state * (frame.height - rowHeight) 
      vehiclesCollection.frame.origin.y += state * (frame.height - rowHeight) 
      colorsCollection.frame.origin.y += state * (frame.height - rowHeight) 
      scrollView.contentSize.height += state * colorsCollection.frame.height 
     case serviceTableView: 
      vehiclesCollection.frame.origin.y += state * (frame.height - rowHeight) 
      colorsCollection.frame.origin.y += state * (frame.height - rowHeight) 
      scrollView.contentSize.height += state * colorsCollection.frame.height 
     default: 
      break 
     } 
    } 

有一條註釋行調整了內容視圖的大小,但是當我調用它時,會使屏幕變亂,點擊的表格不會調整視圖的大小,因爲如果我沒有錯誤,這些組件會重新繪製它們。

沒有調整大小的視圖來適應滾動視圖我不能點擊最低的組件,因爲它們超出了內容視圖的範圍。

非常感謝!

回答

0

在我的觀察中,這些問題是由於約束不隨動畫發生而更新的。 嘗試之前添加以下代碼行和動畫後完成

contentView.layoutIfNeeded() 

這個小行代碼,幫助我在多個場合。希望對你有幫助!

+0

如果我在動畫之前添加它,它是不會幫助,如果我把它放在它不會讓我點擊甚至表視圖 - 它不會拉伸 – yerpy

+0

您是否使用任何佈局約束? –

+0

我是。像頂部,底部,前後滾動視圖一樣,每個視圖都是0,並且使用滾動視圖的超視圖等同高度和寬度。 – yerpy

相關問題