Размер UITableViewWrapperView не изменяется в соответствии с содержанием, если высота строки UITableViewAutomaticDimension

UITableViewWrapperView размер не изменяется в соответствии с содержанием, если высота строки UITableViewAutomaticDimension.

Я пытаюсь создать список фидов с TableView и динамическими строками высоты. 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

Ответ 1

Я предполагаю, что у вас есть автоматическая компоновка, настроенная для вашей ячейки, так как это единственный способ заставить это работать. Автоматическая компоновка должна быть способна вычислять высоту в зависимости от ограничений вашей ячейки.

Таким образом, у вас должны быть ограничения между вашими представлениями по вертикали и между представлениями верхнего и нижнего краев супер-представления (в этом случае вид ячейки).

Предположим, что у вас есть ячейка с названием и описанием, например:

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

В этом примере вам нужно установить добавление ограничения с вертикальным пространством между title и description, ограничение вертикального пространства между вершиной title и верхней частью ячейки и вертикальное пространство между description снизу и нижней части ячейки.

Ответ 2

В документации для оценочногоHeightForRowAtIndexPath() указано, что значение, переназначенное этим вызовом, является значением-заполнителем для всех, пока не произойдет событие прокрутки. Я предполагаю, что когда свиток даже не произойдет, будет вызвана heightForRowAtIndexPath. Итак:

  • Измените значение для расчетной высоты и посмотрите, является ли это фиксированным которую вы наблюдаете.
  • Вызывается ли heightForRow при прокрутке? В противном случае могут возникнуть другие проблемы прокрутки, такие как contentSize и т.д., Которые требуют адресации, чтобы прокрутка выполнялась.