UICollectionViewHeader - Рассчитать размер сложного представления - PullRequest
0 голосов
/ 06 июля 2019

У меня есть UICollectionReusableView, который имеет 2 UIViews как subViews, которые сами имеют разные представления (такие как изображения и метки). Это лучше всего представляет иерархию.

HeaderView(UICollectionReusableView)
    |-- UIView
           |-- Label
           |-- UIButton
           |-- UIButton
    |--UIView
           |-- UIImageView
           |-- UIStackview
                   |-- UILabel
                   |-- UILabel
           |-- UILabel
           |-- UILabel

Теперь я перебрался в Интернете для решения этой проблемы. Но все, что я могу найти, это вычисление высоты UILabel. Мне действительно нужно знать, как именно я это вычисляю. Я даже пытался ссылаться на заголовок в referenceSizeForHeaderInSection и вызывать layoutIfNeeded(), а затем проверять кадры. Но это не похоже на работу.

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

1 Ответ

0 голосов
/ 07 июля 2019

Вы можете попытаться вычислить размер вашего HeaderView в

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {

// if don't use xib file for HeaderView
let header = HeaderView()

// if use xib
let bundle = Bundle(for: HeaderView.self)
let nibName = String(describing: HeaderView.self)
let nib = bundle.loadNibNamed(nibName, owner: HeaderView.self, options: nil)
let header = nib?.first!

// just setup your header with needed data
header.setup(from: yourDataSource)

// set hear needed width
header.setup.frame.size.width = UIScreen.main.bounds.width

header.setNeedsLayout()
header.layoutIfNeeded()

let size = header.systemLayoutSizeFitting(header.frame.size)

return size
}

. В методе настройки заголовка вы настраиваете все представления

func setup(from data: YourDataSource){
   header.label1.text = data.name
   header.label2.text = data.info
   /// just setup all your field
   ....

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