2012-03-31 4 views
2

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

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

- (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, что приведет к тому, что его кадр будет всегда соответствовать его размеру контента автоматически?

ответ

0

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

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

Обход:

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

+0

Спасибо за ваш ввод. Я не могу прокрутить прокрутку таблицы, это не имеет смысла для моего пользовательского интерфейса. Но я думаю, мне просто придется изменить размер своей рамки. – Darren

0

Мне нужно было сделать что-то подобное в 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.) 
} 

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

Смежные вопросы