Я не могу центрировать cell.imageview внутри UItableview как программно - PullRequest
0 голосов
/ 11 октября 2018

Я разработал выпадающее меню для Swift 4. Для этого я использовал кнопку и просмотр таблицы.Я пытаюсь центрировать imageview () с помощью cell.imageview, но получаю ошибку.

Вот мой код:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    customImageView.translatesAutoresizingMaskIntoConstraints = false
    cell.backgroundColor = UIColor.white
    cell.imageView?.image = dropDownOptions[indexPath.row].bankImage

    //  Constraints that i used.
    cell.imageView?.addConstraint(NSLayoutConstraint(item: cell.contentView, attribute: .centerX, relatedBy: .equal, toItem: customImageView, attribute: .centerX, multiplier: 1.0, constant: 0))
    cell.imageView?.addConstraint(NSLayoutConstraint(item: cell.contentView, attribute: .centerY, relatedBy: .equal, toItem: customImageView, attribute: .centerY, multiplier: 1.0, constant: 0))

    return cell
}

Вот ошибка, когда я пытаюсь задать ограничения.

Полный проект

DropDownExample [4701: 223823] [LayoutConstraints] Иерархия представления не подготовлена ​​для ограничения:
При добавлении в представление элементы ограничения должны быть потомками этого представления (или самого представления).Это приведет к сбою, если необходимо разрешить ограничение до того, как будет собрана иерархия представления.Разбить на - [UIView (UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] для отладки.2018-10-11 17: 13: 24.499450 + 0300 DropDownExample [4701: 223823] [LayoutConstraints] Просмотр иерархии, неподготовленной для ограничения.

1 Ответ

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

Во-первых, лучше не создавайте новый UITableViewCell (), лучше используйте:

tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier")

Это создаст новые ячейки только при необходимости.Но помните о случае повторного использования.

В вашем случае вы всегда получаете UITableViewCell со стилем по умолчанию.Это приводит к изображению и текстовой метке.Вы не можете настроить этот вид клеток хорошо.Лучше создайте прототипную ячейку внутри вашей раскадровки и удалите ее из очереди.Пользовательская ячейка может быть полностью настроена.

Если вы не хотите использовать раскадровки - добавьте класс Custom TableViewCell с файлом xib и зарегистрируйте его для повторного использования в представлении таблицы.

tableView.register(UINib(nibName: "myCell", bundle: nil), forCellReuseIdentifier: "myCell")
...