SkeletonTableViewDataSource numberOfRowsInSection never called
⚠️ Please fill out this template when filing an issue.
🙏🏼 Please check if it already exists other issue related with yours.
What did you do?
Created UITableView with isSkeletonable set to true. All cells and its subview also isSkeletonable set to true. Implemented SkeletonTableViewDataSource and numberOfRowsInSection in MyViewController class. Set UITableView's dataSource to MyViewController. Called showSkeleton().
What did you expect to happen?
I expected UITableView to use
func collectionSkeletonView(_ skeletonView: UITableView, numberOfRowsInSection section: Int) -> Int
What happened instead?
It always uses
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
Steps to reproduce the behavior
Steps mentioned in what did you do
SkeletonView Environment
SkeletonView version: 1.8.6 Xcode version: 11.3.1 Swift version: 5.0
showSkeleton should be called on your collection/tableView instead of your view :)
Me too.
@paulanatoleclaudot-betclic thanks for your response, but I call it on collection view.
Me too. It doesn't calculate how many cells need to populate the whole table view.
Boys, I resolved it. I used vc addsubview tableView.
First, you must set vc self.view.isSkeletonable = true
Second, for tableView must use estimatedRowHeight.
tableView.estimatedRowHeight = 130
tableView.rowHeight = UITableView.automaticDimension
Same problem here with 1.8.6 and 1.8.7. Fixed by reverting to version 1.8.5. I am on Xcode 11.3.1 and Swift 5.1
Got the same issue. But instead of composing my own custom TableViewController (UIViewController + UITableView), I instead opted to subclassing UITableViewController. So somehow, you need to explicitly set this controller as the dataSource of the tableView to make SV work.
class CustomTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
...
tableView.dataSource = self
}
...
}
extension CustomTableViewController: SkeletonTableViewDataSource {
...
}
Without this, when you set a breakpoint at line 35 of the file UITableView+CollectionSkeleton, guard always fails because it detects that your dataSource is of type _UIFilteredDataSource and not SkeletonTableViewDataSource.
Here's my spec: SkeletonView: 1.8.7 | Swift: 5 | Xcode: 11.2.1
Boys, I resolved it. I used vc addsubview tableView.
First, you must set vc
self.view.isSkeletonable = trueSecond, for tableView must use estimatedRowHeight.tableView.estimatedRowHeight = 130 tableView.rowHeight = UITableView.automaticDimension
Yep. When you find all the cells are not displaying with showSkeleton(), please set the estimatedRowHeight. Otherwise, they won't show it!!! I think it's better to put this into README. @Juanpe Maybe a Q&A part.
Hi @XiaoxiaYao, you're right. Actually, this info is already in the README file:

But, yes, I agree with you that a Q&A or FAQ section could be very useful. Feel free to create it :)