UICollectionView динамический расчет размера заголовка - PullRequest
0 голосов
/ 11 декабря 2018

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

У меня есть UICollectionView, где у меня есть заголовок.Для шапки я создал свой UICollectionReusableView.Он содержит StackView с двумя метками.Оба они имеют динамические размеры (Lines = 0).Это ограничения для StackView (я также пытался установить нижнее ограничение равным = 0):

StackView ограничения

screen shot

Я вычисляю размер заголовка следующим образом ...

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
    let item = displayItems.object(at: UInt(section)) as! MySectionDisplayItem

    let reusableView: MyReusableView = UIView.fromNib()
    reusableView.setTitle(text: item.getTitle())
        .setSubtitle(subtitle: item.getSubtitle())

    return reusableView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
}

... и возвращаю представление, которое будет отображаться так:

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let item = displayItems.object(at: UInt(indexPath.section)) as! MySectionDisplayItem

    let reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "myReusableView", for: indexPath) as! MyReusableView

    reusableView.setTitle(text: item.getTitle())
        .setSubtitle(subtitle: item.getSubtitle())

    return reusableView
}

В моих UICollectionReusableView и UICollectionViewAuto Layout включен.

Некоторые вещи, которые я пробовал:

  • установить preferredMaxLayoutWidth на разные положительные значения на моих ярлыках
  • внедрить ярлыки в отдельные представления
  • работать с ограничениями вместо использования StackView

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

1 Ответ

0 голосов
/ 02 января 2019

Я наконец решил проблему, ограничив ширину:

reusableView.translatesAutoresizingMaskIntoConstraints = true
reusableView.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true

Возможно, вам также придется поиграться с сопротивлениями сжатия контента.

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