2017-02-22 73 views
0

我知道調整UILabel高度和UITableViewCell可能是一個非常標準的問題,但我發現很多基於故事板和檢查器的答案,但不是僅使用Swift 3.我創建了一個包含屏幕。該小區的高度被確定如下:如何通過編程調整uilabel和uitableviewcell高度?

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

我tableViewCell有一對夫婦在它的對象,一個UIImageView(MYIMAGE)和一個UILabel(會將myText),建立一個自定義類。定位和大小發生在cellForRowAt中。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell 
     cell.myImage.image = UIImage(named: "MyImage") 
     cell.myImage.layer.frame = CGRect(origin: CGPoint(x: 0, y: 10), size: (cell.myImage?.image?.size)!) 
     cell.myText.text = myArray[indexPath.row] 
     cell.myText.frame = CGRect(x: UIScreen.main.bounds.size.width * 0.25, y: 0, width: UIScreen.main.bounds.size.width * 0.7, height: 90) 
     cell.myText.numberOfLines = 0 
     return cell 
    } 

結果是一堆堆疊的單元格,彼此重疊。我應該如何調整UILabel框架的高度以適應myArray文本的數量,並調整單元格高度,使其至少達到myImage或myText的高度?

+0

你有使用autolayout嗎? –

+0

http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights –

+0

我使用自動佈局,並感謝鏈接到以前的問題。我錯過了在另一個問題中以編程方式設置多個對象約束的例子。概念性地描述約束,例如引用updateConstraints(),或使用界面構建器顯示。關於如何將UILabels,UIImageViews等對象綁定到單元格的contentView以及如何/何時調用updateConstraints,你有更多的解釋嗎? –

回答

0

您可以在Swift 3的表格視圖中製作多行標籤。

import UIKit 

     private let useAutosizingCells = true 

     class TableViewController: UITableViewController { 

      fileprivate let cellIdentifier = "Cell" 

      // MARK: - Lifecycle 

      override func viewDidLoad() { 
       super.viewDidLoad() 

       //setup initial row height here 
       if useAutosizingCells && tableView.responds(to: #selector(getter: UIView.layoutMargins)) { 
        tableView.estimatedRowHeight = 44.0 
        tableView.rowHeight = UITableViewAutomaticDimension 
       } 
      } 

    // MARK: - UITableViewDataSource 
    extension TableViewController { 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return detailsModel.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) 
     let details = detailsModel[indexPath.row] 

     cell.textLabel?.text = details.title 
     cell.detailTextLabel?.text = details.description 

     if useAutosizingCells && tableView.responds(to: #selector(getter: UIView.layoutMargins)) { 
      cell.textLabel?.numberOfLines = 0 
      cell.detailTextLabel?.numberOfLines = 0 
     } 

     return cell 
    } 

} 
+0

謝謝。我不明白爲什麼行數應該依賴於常量useAutosizingCells。從我迄今爲止所瞭解到的情況來看,需要首先設置單元中對象的約束條件,將單元格的contentView綁定到標籤的下邊緣。我正在研究它是如何完成的。你有代碼示例,你展示瞭如何做到這一點? –

相關問題