У меня есть простой UICollectionVewController с одной ячейкой прототипа. В ячейке у меня есть UILabel.Ошибка UICollectionView auto layout
У меня есть классы размеров и автомат. Я установил ограничение для
top (Top Space to cell): = 100
Height >= 17
Trailing space to Cell = 0
Leading Space to Cell = 0
В этой конфигурации он отлично работает. Однако я хочу левый и правый край на клетку, поэтому я изменил начальное и завершающее пространство 10.
Хотя это работает, я получаю следующее сообщение об ошибке:
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x1740907c0 H:[UILabel:0x14de1a380'This is a test to see wha...']-(10)-| (Names: '|':UIView:0x14de1a270)>",
"<NSLayoutConstraint:0x174090810 H:|-(10)-[UILabel:0x14de1a380'This is a test to see wha...'] (Names: '|':UIView:0x14de1a270)>",
"<NSAutoresizingMaskLayoutConstraint:0x174090d10 h=--& v=--& H:[UIView:0x14de1a270(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1740907c0 H:[UILabel:0x14de1a380'This is a test to see wha...']-(10)-| (Names: '|':UIView:0x14de1a270)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Если установить ведущее место до 10 и удалить учебное пространство и установить ограничение ширины, я не получаю ошибку.
Однако ширина ячейки является переменной, поэтому я не могу установить ширину.
я могу работать вокруг него, создавая выход к ширине ограничения и делает это:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
CGRect colViewSize = collectionView.bounds;
int width = colViewSize.size.width;
width -= 28; // 10px either size and 8px in middle
width = width/2;
width -=14; // margin of 7 (x 2)
cell.labelconstraintWidth.constant = width;
return cell;
однако это кажется такой хак.
Кто-нибудь знает, что здесь происходит.
Спасибо за ваш комментарий. 1) Ширина моего представления установлена равной 50% экрана, поэтому никогда не устанавливается меньше 20. Происходит ли сначала изменение размера, где оно равно нулю, а затем размеры до нужного размера? - 2) Как вы можете установить процентную марку маркера в раскадровке? 3) Что касается вашего последнего комментария, вы говорите, что то, что я делаю в cellForItem ... на самом деле является действительным способом делать вещи - 4) Вы говорите, что ошибка - это красная селедка, как в "нормальном" использование, ширина всегда больше 20? – grayson
Отредактировал свой ответ. – Mercurial
Вы нашли решение? У меня такая же проблема ... – HixField