![](/img/trans.png)
[英]ios swift: How to have one static cell in a dynamic tableview?
[英]How to have multiple cell sizes in a dynamic tableView in swift?
它就像實現一樣簡單:
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
為原型單元定義自動布局約束。
指定表視圖的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.