Размер 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 и т.д., Которые требуют адресации, чтобы прокрутка выполнялась.