В чем разница реализации между UITableView и UICollectionView при использовании Xib? - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь реализовать TableView и CollectionView с Xib-файлами.Я правильно реализую UITableview, но когда я пытаюсь реализовать ColletionView, я получаю ошибку "libc ++ abi.dylib: завершение с необработанным исключением типа NSException" .Я получил эту ошибку в var collectionView = UICollectionView() строке.Почему я не получаю эту ошибку в этой строке var tableView = UITableView()?И где моя ошибка?И каково решение?Заранее спасибо.

var tableView = UITableView()
var collectionView = UICollectionView()

override func viewDidLoad() {
    super.viewDidLoad()

    let headerMenu = UIView()
    headerMenu.translatesAutoresizingMaskIntoConstraints = false
    headerMenu.backgroundColor = .green
    self.view.addSubview(headerMenu)

    headerMenu.heightAnchor.constraint(equalToConstant: 48.0).isActive = true
    headerMenu.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true
    headerMenu.topAnchor.constraint(equalTo: view.safeTopAnchor).isActive = true


    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.translatesAutoresizingMaskIntoConstraints = false
    headerMenu.addSubview(collectionView)

    collectionView.topAnchor.constraint(equalTo: headerMenu.topAnchor, constant: 0).isActive = true
    collectionView.bottomAnchor.constraint(equalTo: headerMenu.bottomAnchor, constant: -10).isActive = true
    collectionView.rightAnchor.constraint(equalTo: headerMenu.rightAnchor, constant: -10).isActive = true
    collectionView.leftAnchor.constraint(equalTo: headerMenu.leftAnchor, constant: 10).isActive = true

    collectionView.register(UINib(nibName: "MenuCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "MenuCollectionViewCell")


    let mainView = UIView()
    mainView.translatesAutoresizingMaskIntoConstraints = false
    self.view.addSubview(mainView)
    mainView.topAnchor.constraint(equalTo: headerMenu.bottomAnchor, constant: 0).isActive = true
    mainView.bottomAnchor.constraint(equalTo: view.safeBottomAnchor, constant: 0).isActive = true
    mainView.rightAnchor.constraint(equalTo: view.safeRightAnchor, constant: 0).isActive = true
    mainView.leftAnchor.constraint(equalTo: view.safeLeftAnchor, constant: 0).isActive = true
    mainView.backgroundColor = UIColor.white

    tableView.delegate = self
    tableView.dataSource = self
    tableView.translatesAutoresizingMaskIntoConstraints = false
    tableView.estimatedRowHeight = UITableViewAutomaticDimension
    mainView.addSubview(tableView)

    tableView.topAnchor.constraint(equalTo: mainView.topAnchor, constant: 0).isActive = true
    tableView.bottomAnchor.constraint(equalTo: mainView.bottomAnchor, constant: -10).isActive = true
    tableView.rightAnchor.constraint(equalTo: mainView.rightAnchor, constant: -10).isActive = true
    tableView.leftAnchor.constraint(equalTo: mainView.leftAnchor, constant: 10).isActive = true
    tableView.separatorStyle = .none
    tableView.register(UINib(nibName: "ProductTableViewCell", bundle: nil), forCellReuseIdentifier: "ProductTableViewCell")
   } 

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

UICollectionView требует UICollectionViewLayout для визуализации.При создании представления коллекции через раскадровку это значение уже установлено со значением по умолчанию.

Вы можете инициализировать его следующим образом:

let flowLayout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: flowLayout)

Макет потока

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

Схема потока является одной из стандартных /встроенные параметры и полезны для создания сетки стиля «книжная полка», в которой столбцы заполняются слева направо, а затем сверху вниз (если вы не измените ширину).

На веб-сайте Ray Wenderlich есть хорошее руководство по , которое объясняет больше о видах коллекций и их макетах

0 голосов
/ 04 октября 2018

Вам нужно использовать другие init для создания экземпляра UICollectionView:

let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: rect, collectionViewLayout: layout)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...