Неустранимая ошибка при изменении типа UICollectionViewCell при использовании предпочитаемомLayoutAttributesFitting - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь создать UICollectionView (это просто раздел viewController, а не полноэкранный режим) с различными пользовательскими ячейками, которые изменяются с помощью plotControl. Ячейки и переключение между ними работали нормально, но с тех пор я пытался сделать их совместимыми с Dynami c Text, поэтому мне нужно, чтобы ячейки меняли свой размер в зависимости от размера текста.

Мне удалось получить ячейки, которые вначале выглядят работающими и динамически изменяющими размер, но при использовании plotControl для перехода на другой тип ячейки происходит сбой при «return LayoutAttributes» в предпочитаемое значениеLayoutAttributesFitting

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

Вот сообщение об ошибке:

[Предупреждение] Только одно предупреждение: Обнаружен случай где ограничения неоднозначно предлагают нулевой размер для представления содержимого ячейки представления коллекции. Мы рассматриваем непреднамеренный крах и вместо этого используем стандартный размер. Ячейка:> 2020-03-23 ​​10: 36: 26.670420-0400 ProgrammaticBetterWeather [30213: 1891343] * Ошибка подтверждения в - [_ UIUpdateVisibleCellsContext addPreferredAttributes:], /BuildRoot/Library/Caches/com.apples.xbs UIKitCore_Sim / UIKit-3901.4.2 / UICollectionViewLayout.m: 2247 2020-03-23 ​​10: 36: 26.679011-0400 ProgrammaticBetterWeather [30213: 1891343] * Завершение работы приложения из-за невыполненного исключения «NSInternalInconsistencyException», причина: «Неверный параметр не удовлетворяет:! CGSizeEqualToSize (size, CGSizeZero) '*** Стек первого вызова вызова:

Вот код для размещения неработающей ячейки:

//create cell size
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
    setNeedsLayout()
    layoutIfNeeded()

    //when vertical is set to fittingSizeLevel it fails all others it doesn't layout properly but no crash
    layoutAttributes.frame.size = systemLayoutSizeFitting(UIView.layoutFittingCompressedSize, withHorizontalFittingPriority: .defaultLow, verticalFittingPriority: .fittingSizeLevel)

    return layoutAttributes

}

override func setupViews() {

    contentView.translatesAutoresizingMaskIntoConstraints = false
     NSLayoutConstraint.activate([
        contentView.leftAnchor.constraint(lessThanOrEqualTo: leftAnchor),
        contentView.rightAnchor.constraint(lessThanOrEqualTo: rightAnchor),
        contentView.topAnchor.constraint(lessThanOrEqualTo: topAnchor),
        contentView.bottomAnchor.constraint(lessThanOrEqualTo: bottomAnchor),
     ])

    //add subviews
    contentView.addSubview(dailyCellDayWeekLabel)
    contentView.addSubview(dailyCellWeatherImage)
    contentView.addSubview(dailyCellWeatherLabel)
    contentView.addSubview(dailyCellDayMonthLabel)

    //horizontal constraints
    addConstraintsWithFormat(format: "H:|[v0]|", views: dailyCellDayWeekLabel)
    addConstraintsWithFormat(format: "H:|[v0]|", views: dailyCellWeatherImage)
    addConstraintsWithFormat(format: "H:|[v0]|", views: dailyCellWeatherLabel)
    addConstraintsWithFormat(format: "H:|[v0]|", views: dailyCellDayMonthLabel)

    //vertical constraints
    addConstraintsWithFormat(format: "V:|-8-[v0][v1]-8-[v2(40)]-8-[v3]", views: dailyCellDayWeekLabel, dailyCellDayMonthLabel, dailyCellWeatherImage, dailyCellWeatherLabel)

}

}

...