2014-11-05 104 views
0

我跟着這個教程,以實現動態單元格高度:http://www.appcoda.com/self-sizing-cells/動態UITableCellView高度

所以我在viewDidLoad添加

tableView.estimatedRowHeight = 44.0 
tableView.rowHeight = UITableViewAutomaticDimension 

,將標籤設置爲0線和字體設置爲系統。結果是單元格的大小現在是動態的,並且內容顯示正確,但在表格第一次顯示時不是。那麼一些細胞顯示正確,但其他細胞的高度爲44.當我滾動桌子時,高度似乎得到糾正。在教程中,他們描述如下:

當第一次顯示錶視圖時,您可能會發現某些單元格 的大小設置不正確。但是當您滾動表格視圖時,新的 單元格將顯示正確的行高。要解決此問題, 可以在視圖出現後

我試着用

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.estimatedRowHeight = 64 
    self.tableView.rowHeight = UITableViewAutomaticDimension 
} 

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    self.tableView.reloadData() 
} 

,但它不工作強制重新加載。任何想法如何解決這一問題?我使用的是xcode 6.1和iOS8.1,我使用的是swift。

我創建GitHub上一個簡單的測試項目:https://github.com/ArtworkAD/DynamicCellTest

+0

顯示你是viewDidLoad()函數 – 2014-11-05 09:07:07

+0

@OlegGordiichuk我編輯了我的問題。 – 2014-11-05 09:13:03

回答

2

我下載了你在GitHub上創建的項目,並做了一些修改並使其工作。

在視圖控制器的代碼看起來像這樣...

import UIKit 

class MyTableViewController: UITableViewController { 

    var entries:Array<String> = [String]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     var i = 0 
     while i < 20 { 
      entries.append("\(i) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor") 
      i++; 
     } 

     self.tableView.rowHeight = UITableViewAutomaticDimension 
    } 

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     //ask for a reusable cell from the tableview, the tableview will create a new one if it doesn't have any 
     let cell = self.tableView.dequeueReusableCellWithIdentifier("basic_cell", forIndexPath: indexPath) as UITableViewCell 

     var label = cell.viewWithTag(13) 

     if let unwrappedLabel = label as? UILabel { 
      unwrappedLabel.text = self.entries[indexPath.row] 
     } 

     return cell 
    } 
} 

和故事板看起來像這樣...

enter image description here

通知的自動版式的限制會從頂部向底部該單元格和我設置的行數爲0.

然後當運行應用程序時...

enter image description here

+0

嗯這不適合我,我創建了一個簡單的測試項目在github上。請看看https://github.com/ArtworkAD/DynamicCellTest – 2014-11-05 09:34:16

+0

@artworkadシ啊,我明白了。閱讀我關聯的博客。它使用靜態tableView,但理論依然如此。據我發現,你需要使用自定義單元格和AutoLayout約束來佈置內容。嘗試使用自定義單元格類型和使用AutoLayout的UILabel。 – Fogmeister 2014-11-05 09:45:50

+0

@artworkadシ確定,要編輯答案... – Fogmeister 2014-11-05 09:51:43

-2

我覺得是OK重新加載表willDisplayCellMethod一個dispatch_once塊內。這是一個客觀的C語法。你可以快速解決問題。

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 

     [self.tableView reloadData]; 
    }); 
} 
+0

你能展示一些代碼嗎? – 2014-11-05 08:56:51

+0

@artworkadシ添加了一個示例代碼片段。 – Vignesh 2014-11-05 08:58:43

+0

我認爲這是錯誤的。這導致表格只顯示一個單元格。 – 2014-11-05 09:04:44