Визуализация: введите описание изображения здесь
Я использовал макет UIStackView, часть изображения использует UICollectionView.
UITableViewCell:
let nameStackView = UIStackView(arrangedSubviews: [name, time])
nameStackView.axis = .vertical
let userStackView = UIStackView(arrangedSubviews: [avatar, nameStackView])
userStackView.axis = .horizontal
userStackView.spacing = 10
let headerStackView = UIStackView(arrangedSubviews: [userStackView, describeLabel])
headerStackView.isLayoutMarginsRelativeArrangement = true
headerStackView.layoutMargins = UIEdgeInsets(top: 15, left: 15, bottom: 15, right: 15)
headerStackView.axis = .vertical
headerStackView.spacing = 10
let commentStackView = UIStackView(arrangedSubviews: [UIView(), commentButton, likeButton])
commentStackView.isLayoutMarginsRelativeArrangement = true
commentStackView.layoutMargins = UIEdgeInsets(top: 15, left: 15, bottom: 20, right: 15)
rootStackView = UIStackView(arrangedSubviews: [headerStackView, collectionView, commentStackView])
rootStackView.translatesAutoresizingMaskIntoConstraints = false
rootStackView.axis = .vertical
contentView.addSubview(rootStackView)
NSLayoutConstraint.activate([
avatar.widthAnchor.constraint(equalToConstant: 34),
avatar.heightAnchor.constraint(equalToConstant: 34),
rootStackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 0),
rootStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: 0),
rootStackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0),
rootStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0)])
Код является основной частью макета, не считая элементов, он должен быть понятен.
Сложная часть - это макет высоты UICollectionView. Есть хороший способ?