Я хочу создать страницу профиля пользователя в приложении Instagram для iOS, я использовал tableView с вложенным collectionView, и он не работает у меня правильно, есть ли какие-либо рекомендации или определенные подходы, которые следует учитывать, меня интересуют только Заголовок профиля (изображение профиля и биография) и сетка фотографий с разделом горизонтальной прокрутки.
изображение профиля пользователя instagram
в настоящее время я добился такого поведения (игнорируйте горизонтальную прокрутку для раздела ):
tableView и collectionView не прокручиваются вместе, как отдельная страница содержимого или подписи, которую они прокручивают отдельно, если collectionView scrollingisEnabled = false
и высота tableViewCell являются большими, он работает нормально, но collectionView загружает все ячейки в один раз
иерархия представления раскадровки:
исходный код:
class ViewController: UITableViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(SectionHeader.self, forHeaderFooterViewReuseIdentifier: "h")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return tableView.frame.size.height - tableView.tableHeaderView!.frame.height
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 60
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let x = tableView.dequeueReusableHeaderFooterView(withIdentifier: "h") as! SectionHeader
x.contentView.backgroundColor = .green
x.addSections(sectionNames: [ "A", "B", "C", "D" ])
x.segment.addTarget(self, action: #selector(handleSegmentSectionChange(segmentControl:)), for: .valueChanged)
return x
}
@objc
func handleSegmentSectionChange(segmentControl: UISegmentedControl) {
print("load section")
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 100
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "c", for: indexPath)
let label = cell.viewWithTag(10) as! UILabel
label.text = "\(indexPath)"
print("getting cell at \(indexPath)")
cell.backgroundColor = .orange
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width , height: 80)
}
}
спасибо.