簡體   English   中英

如何在swift中的動態tableView中擁有多個單元格大小?

[英]How to have multiple cell sizes in a dynamic tableView in swift?

我希望在tableView中擁有不同大小的單元格但是在構建和運行應用程序之后我發現所有單元格都具有相同的大小,並且更大的單元格被裁剪,其內容變得不完整。 我在屬性檢查器中設置了大小。

這是截圖

它就像實現一樣簡單:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return CGFloat(#your desired size#)
}

只需在此函數中使用switch / case並使用indexPath.row。 您還可以使用UITableViewAutomaticDimension進行自動調整大小

編輯:

根據標題,這個問題的描述和提供的圖片,我猜測了3種可能的情況,並試圖在上面的簡短回答中涵蓋所有情況。 但是,正如利赫認為情況並非如此,我將要清理一切。

請記住 ,對於動態行,您必須在autolayout中修復其所在位置的所有視圖,這意味着您必須從場景頂部到底部和左側設置約束。 可能的情況是:

情況1:表中有2個不同的單元格,您知道它們的大小(第一行是type1,其他單元格是type2)。

在這種情況下,您只需要在我提到的函數中添加if子句或switch / case(想象第一行是88點,其余是44點):

return indexPath.section == 0 ? CGFloat(88.0) : CGFloat(44.0)

情況2:您的第一行是固定大小,其余是動態的。

在單元格上設置正確的約束后,在viewDidLoad添加tableView.estimatedRowHeight = CGFloat(44.0) ,其中estimatedRowHeight是單元格的最小可能高度。 然后你可以這樣寫你的代碼:

return indexPath.section == 0 ? CGFloat(88.0) : UITableViewAutomaticDimension

情況3:行的高度都是動態的,您希望它們全部自行擴展。 在這種情況下,您根本不需要我提到的功能。 實際上,如果你的代碼中有它,你必須刪除它。 在這種情況下繼續並將此代碼添加到您的代碼的viewDidLoad (想象您的單元格的最小可能高度是44點):

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = CGFloat(44.0)

再次記住,正確設置所有約束以使其正常工作非常重要。 一個例子:我猜“細節”標簽是使你的行高度增長而標題是固定大小的標簽,所以這些是你在“細節”標簽上需要的約束:將它的高度設置為大於等於(> =) 21,將其設置為在superview中間垂直對齊(通過在storyboard中設置“Vertical in Container”約束),將水平空間設置為“title”標簽,將尾隨空間設置為superview,將行數設置為0,使其展開無限地,最后將換行符屬性設置為“自動換行”。 在這種情況下,您的標題必須具有特定的寬度約束,否則您將收到錯誤。

PS:實際上現在我正在寫這個我可以想象另一種情況,你的“標題”標簽的寬度也是動態的。 這將使你的tableView非常難看,但如果這是你的情況,你需要在你的標簽上設置“內容擁抱”和“內容壓縮”, 這里描述(CHCR)

https://www.raywenderlich.com/129059/self-sizing-table-view-cells

  1. 每個子視圖是否都有限制所有方面的約束?
  2. 是否存在從contentView的頂部到底部的約束?
  3. 你在設置tableView.rowHeight = UITableViewAutomaticDimension嗎?

為原型單元定義自動布局約束。

指定表視圖的estimatedRowHeight

將表視圖的rowHeight設置為UITableViewAutomaticDimension

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

如果您使用的是Autolayout,一切都會按預期工作。

您將在此獲得示例演示。

https://www.dropbox.com/s/ug9xu0yfcua902o/SelfSizingDemo.zip?dl=0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM