Программная установка ограничений макета в UICollectionViewCell

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

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

Я включил картинку ниже моего ожидаемого макета:

введите описание изображения здесь

Для вертикального макета у меня есть следующее, где метки от l1 до l3, а изображение это i1:

Чтобы ограничить изображение 20px сверху:

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[i1(42)]", options: nil, metrics: nil, views: dictionaryOfViews))

Чтобы ограничить метки по вертикали в ячейке с фиксированной высотой 134:

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[l1(21)][l2(21)]-10-[l3(42)]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))

Затем я ожидал, что метки по горизонтали будут такими:

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[i1(42)]", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-82-[l1]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-82-[l2]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-82-[l3]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))

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

descriptionLabel.setContentCompressionResistancePriority(0, forAxis: .Horizontal)

Проблема, с которой я сталкиваюсь, заключается в том, что все метки все еще кажутся слишком далеко слева, а справа остается довольно большой промежуток, как будто ширина не регулируется динамически?

Любые мысли о том, как я могу исправить это, будет принята с благодарностью.

Большое спасибо.

1 ответ

Просто мысль здесь... Вы пытались установить левую сторону этикетки на правой стороне изображения?

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[i1]-20-[l1]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[i1]-20-[l2]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[i1]-20-[l3]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
Другие вопросы по тегам