2016-11-10 78 views
1

我在一個單元格中具有不同內容(視圖,標籤,圖像視圖)的tableView單元格。但在某些細胞內容可能不完整。我如何使用調整大小的單元格而不刪除和添加總是約束?謝謝。如何在不刪除iOS中的約束條件下調整具有不同內容的tableView單元格

illustration of the problem

+0

這裏是可以幫助你的東西 - http://stackoverflow.com/questions/18065938/how-to-use-auto-layout-to-move-other-views-when-a-view-is-hidden –

+0

我檢查了這裏,這裏是約束的工作,但我有非常多的元素,它可以是非常多的代碼來做到這一點 –

回答

0

一個針對此問題可能的解決方案:

  1. 爲隱藏狀態添加約束優先1000
  2. 添加調整大小狀態額外的限制低優先級(前750)
  3. 保存約束是僅用於隱藏狀態的IBOutlet集合
  4. 將約束條件保存爲僅將用於調整大小的狀態到另一個IBOutlet收集

代碼:

@IBOutlet var hiddenConstraints: [NSLayoutConstraint] = [] 
@IBOutlet var visibleConstraints: [NSLayoutConstraint] = [] 

func hide(_ hide: Bool) { 

    for hiddenConstraint in self.hiddenConstraints { 
     hiddenConstraint.isActive = hide 
    } 

    for visibleConstraint in self.visibleConstraints { 
     visibleConstraint.isActive = !hide 
    } 

    self.layoutIfNeeded() 
} 

有更快的解決方案:

  1. 移動內容可以隱藏到容器視圖
  2. 設置高度約束的容器視圖
  3. 變化從代碼高度約束常量到0如果隱藏或適當的高度,如果可見

代碼:

@IBOutlet var heightConstraint: NSLayoutConstraint! 

func hide(_ hide: Bool) { 

    self. heightConstraint.constant = hide ? 0 : 150 //Estimated height 

    self.layoutIfNeeded() 
} 

這不是一個好辦法,因爲它會導致崩潰的約束在運行時。所以我更喜歡用第一個。

此外,您還需要從表格中更新您的單元格以將其他單元格向上或向下移動。

+0

謝謝,工作良好 –

0

雷Wenderlich對錶格單元格的動態調整大小一個夢幻般的教程,可以在這裏找到: https://www.raywenderlich.com/129059/self-sizing-table-view-cells

TL; DR你需要確保你的內容在所有四邊固定到單元格的內容視圖,以及設置爲高優先級垂直擁抱,大於或等於您的標籤上的高度限制。

+0

問題是,意見有兩種狀態:隱藏,不隱藏。當它不隱藏時,它具有高度和所有約束,並且單元格不能更小 –

+0

當你說隱藏時,我假設你正在設置隱藏屬性?嘗試爲高度約束添加一個出口,並將其設置爲0以隱藏,然後單元格將按預期調整大小。 –

+0

再次使用約束。否則視圖有頂部和底部約束,正如你所說 - 我需要別人在這些項目的網點,並設置0 –

相關問題