Не удается создать UICollectionView с 3 столбцами - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь создать вид UICollectionView / grid с тремя столбцами, но, несмотря на все, что я пробовал, у меня ничего не получилось.

Код, который я использовал ниже:

import UIKit

class SearchResultsViewController: UIViewController,UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

// Actual code
@IBOutlet weak var collectionView: UICollectionView!
public var results: [UIImage]!

func loadImages(images: [UIImage]) {
    results = images
}

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView.dataSource = self
    collectionView.delegate = self

    self.navigationController?.setNavigationBarHidden(false, animated: true)

    // Disable the margins
    let flow = collectionView?.collectionViewLayout as! UICollectionViewFlowLayout
    collectionView.contentOffset = CGPoint.zero
    flow.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
    flow.minimumInteritemSpacing = 0
    flow.minimumLineSpacing = 0
}

// UICollectionView
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 64
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let screenWidth = UIScreen.main.bounds.width
    return CGSize(width: screenWidth/3, height: screenWidth/3)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top: 0, left: 0, bottom: 5, right: 5)
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)


    return cell
}

}

Я ищу трехколонный макет, похожий на фото приложения, такие как использование Instagram (обратите внимание, что 64 естькак фиктивные данные, так что я могу проверить, что это работает, если это работает, оно будет заменено реальными изображениями)

Вместо того, чтобы получить ожидаемый результат, я получаю следующее: [Unexpected result1]

1 Ответ

0 голосов
/ 24 ноября 2018

Используйте вот так:

lazy var collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical
    layout.minimumLineSpacing = 10
    layout.minimumInteritemSpacing = 10
    let width = (view.frame.width - 10 * 3) / 2
    layout.itemSize = CGSize(width: width, height: width)
    layout.sectionInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
    cv.delegate = self
    cv.dataSource = self
    cv.translatesAutoresizingMaskIntoConstraints = false
    cv.showsVerticalScrollIndicator = false
    cv.backgroundColor = .clear
    return cv
}()

Кроме того, вам не нужно использовать эти методы.Больше не требуется.

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
}

Output Screenshot

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