如果行高是UITableViewAutomaticDimension,UITableViewWrapperView大小不会根据内容更改

时间:2014-11-28 07:09:37

标签: ios uitableview swift

如果行高为UITableViewWrapperView,则

UITableViewAutomaticDimension大小不会根据内容进行更改。

我正在尝试使用TableView和动态高度行创建Feed列表。 TableView是可滚动的,但UITableViewWrapperView看起来没有改变它的大小!

以下是视图层次结构的代码和屏幕截图。

我觉得很奇怪。

代码:

class FeedController: UITableViewController {

    var items: NSMutableArray = []

    override func viewDidLoad() {
        super.viewDidLoad()

        refreshControl?.addTarget(self, action: "feedLoad", forControlEvents: UIControlEvents.ValueChanged)

        self.feedLoad()

    }

    override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 120.0
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        println("called")
        return UITableViewAutomaticDimension
    }

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return self.getCellForItemAtIndexPath( indexPath )
    }

    func getCellForItemAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell {

        let item: Dictionary = self.items[indexPath.row] as Dictionary<String, AnyObject>

        let cell = tableView.dequeueReusableCellWithIdentifier( (item["type"] as String) + "Cell", forIndexPath: indexPath ) as FeedViewCell

        cell.fillData(item)

        return cell as UITableViewCell
    }

    func feedLoaded(){

        tableView.reloadData()

    }

    func feedLoad(){
        // Feed Load Logic which will call next line once feed loaded

        self.feedLoaded()
    }

}

View Hierarchy

3 个答案:

答案 0 :(得分:0)

我假设您已为您的手机配置了自动布局,因为这是实现此功能的唯一方法。自动布局应该能够根据您的单元格约束计算高度。

因此,您应该在垂直视图之间以及超视图的顶部和底部边缘上的视图之间存在约束(在本例中为单元格视图)。

假设您有一个标题和描述的单元格,如下所示:

|------------------|
| Title            |
|                  |
| Description with |
| long multiple    |
| lines of text    |
|------------------|

在此示例中,您必须设置添加约束,其中titledescription之间的垂直空间是title顶部和description顶部空间的约束。单元格视图顶部和n底部与单元格视图底部之间的垂直空间。

答案 1 :(得分:0)

estimatedHeightForRowAtIndexPath()的文档说,该调用重新调整的值是所有滚动事件发生之前的占位符值。我猜测当滚动偶然发生时,将调用heightForRowAtIndexPath。所以:

  1. 更改估计高度的值,看看是否是固定的 你观察到的高度。
  2. 滚动时是否会调用heightForRow?如果没有,可能还有其他有关滚动的问题,例如contentSize等,需要解决才能进行滚动。

答案 2 :(得分:0)

使用 automaticDimention 时,应在 UItableViewCell 中的UILabel两侧添加约束。