Установка фрейма UITableView в соответствии с размером его содержимого - PullRequest
2 голосов
/ 31 марта 2012

У меня нет прокручиваемого UITableView внутри большего UIScrollView.Поскольку табличное представление не прокручивается, я хочу, чтобы его размер кадра всегда совпадал с размером его содержимого.

У меня есть следующий метод, который я вызываю:

- (void)resizeTableViewFrameHeight
{
    // Table view does not scroll, so its frame height should be equal to its contentSize height
    CGRect frame = self.tableView.frame;
    frame.size = self.tableView.contentSize;
    self.tableView.frame = frame;
}

Проблема заключается в том, чтовызывать этот метод в неподходящее время (до установки contentSize).Мне было интересно, есть ли свойство, которое я могу установить в UITableView, которое заставит его кадр всегда автоматически соответствовать его размеру контента?

Ответы [ 2 ]

0 голосов
/ 27 августа 2015

Мне нужно было сделать что-то подобное в iOS 8: представление с прокруткой, которое содержало не прокручиваемое табличное представление фиксированной ширины с переменным количеством строк содержимого, поэтому я хотел динамически изменить высоту табличного представления.

Что мне помогло, так это установить ограничение высоты для табличного представления с фиктивным значением, а затем создать выходы как для табличного представления, так и для ограничения.Тогда это было все, что мне было нужно:

class ViewController: UIViewController, UITableViewDataSource {

    @IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint!
    @IBOutlet weak var tableView: UITableView!

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        tableViewHeightConstraint.constant = tableView.contentSize.height
    }

    // (plus additional data source methods, etc.)
}

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

0 голосов
/ 01 апреля 2012

Нет свойства, которое динамически регулирует фрейм табличного представления.Кроме того, я не думаю, что UITableView может рассчитать весь свой contentSize заранее, потому что размер таблицы может быть практически бесконечным, в зависимости от того, что указано в его datasource и других методах делегатов, таких как heightForRowAtIndexPath,Эти методы могут быть динамическими, что делает практически невозможным прогнозирование полного размера табличного представления.

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

Обходной путь:

Ограничив рамку представления таблицы видимой областью представления прокрутки, вы можете просто позволить ему прокручиваться.Возможно, вам нужно запретить прокрутку представления прокрутки во время прокрутки таблицы, и наоборот.Вы можете легко сделать это с помощью методов делегата UIScrollView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...