Как с помощью Swift создать страницу профиля пользователя в Instagram? - PullRequest
2 голосов
/ 28 мая 2020

Я хочу создать страницу профиля пользователя в приложении Instagram для iOS, я использовал tableView с вложенным collectionView, и он не работает у меня правильно, есть ли какие-либо рекомендации или определенные подходы, которые следует учитывать, меня интересуют только Заголовок профиля (изображение профиля и биография) и сетка фотографий с разделом горизонтальной прокрутки.

изображение профиля пользователя instagram

в настоящее время я добился такого поведения (игнорируйте горизонтальную прокрутку для раздела ):

tableView и collectionView не прокручиваются вместе, как отдельная страница содержимого или подписи, которую они прокручивают отдельно, если collectionView scrollingisEnabled = false и высота tableViewCell являются большими, он работает нормально, но collectionView загружает все ячейки в один раз

enter image description here

иерархия представления раскадровки:

enter image description here

исходный код:

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)
}

}

спасибо.

1 Ответ

1 голос
/ 29 мая 2020

Думаю, я знаю, о чем вы спрашиваете, поэтому я возьму на себя удар.

Как вы сказали, вы можете использовать tableView с вложенным collectionView для фотографий. Для изображения профиля. Я бы сказал, что это просто UIImage, а boi, вероятно, - это UITextView. Это было бы мое предположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...