2016-02-08 3 views
-1

У меня есть TableView, который постоянно меняется (ячейки вставлены и удалены) внутри ScrollView. Я отключил прокрутку для TableView, потому что над TableView есть MapView, и я хочу прокрутить весь View, а не только TableView, когда пользователь прокручивается вверх. Поскольку ячейки постоянно вставляются и удаляются в TableView, высота для TableView не будет фиксироваться в течение всего времени работы приложения.Установите высоту TableView как сумму высот своих ячеек (Swift 2.0)

Я пытаюсь постоянно установить высоту TableView, чтобы соответствовать высоте суммы содержания внутри, делая,

func someFunc() { 

    // call viewDidAppear to update TableView 
    viewDidAppear(true) 

    // Calculate the size of the ScrollView 
    var y: CGFloat = 10 
    y = mapView.bounds.size.height + tableView.bounds.size.height + 10 
    var sz = scrollView.bounds.size 
    sz.height = y 
    scrollView.contentSize = sz 

} 

// Update the TableView on main thread 
override viewDidAppear(animated: Bool) { 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.tableView.reloadData() 
     var frame: CGRect = self.tableView.frame 
     frame.size.height = self.tableView.contentSize.height 
     self.tableView.bounds.size.height = frame.size.height 
    }) 
} 

Однако tableView.bounds.size.height не обновляясь до новой высоты контента. На самом деле он обновляет иногда, может быть, раз в несколько звонков. Я почти уверен, что это потому, что dispatch_asyn() - это асинхронный метод. Поэтому мне может понадобиться вернуться в методе, чтобы решить эту проблему, но я не уверен, как это сделать.

Выполняю ли я это правильно, чтобы выполнить то, что мне нужно? Есть лучший способ сделать это? Любая помощь приветствуется.

ответ

0

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

После того, как вы подключили Table View с выходом и добавили UITableViewDelegate и UITableViewDataSource протокол к вашему View Controller можно программно установить высоту Table Vi Ce, делая

self.tableView.rowHeight = 100.0 

в вашем viewDidLoad().

Затем, если вы Table View данные поступают из массива, вы можете сбросить высоту вашего tableView быть

self.tableView.bounds.height = CGFloat(dataArray.count) * (self.tableView.rowHeight) 

Обратите внимание, как вы должны бросить длину DataArray к CGFloat, потому что self.tableView.bounds.height имеет тип CGFloat.

Теперь высота вашего представления таблицы представляет собой высоту суммы всех ее ячеек.

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