Программная установка ограничений макета в 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))