2014-10-03 2 views
5

Я использую автозапуск в UICollectionViewCell. Супер простая компоновка: только UILabel. Я хочу, чтобы UILabel занимал всю ширину минус 20 пикселей вставки и центрировался в ячейке как по вертикали, так и по горизонтали. Я установил ограничения, которые делают именно это. Если я запускаю его на любом устройстве iOS 8 или симуляторе, он отлично работает. Однако, когда я запускаю его на некоторых устройствах ios 7, ограничения не влияют. Я пробовал просматривать документы Apple, но ни одна из их изменений, похоже, не связана с автомаршрутом.AutoLayout работает в ios 8, но не в ios 7?

Вот исходный XML-код, хотя я сомневаюсь, что это много значит:

<constraints> 
      <constraint firstItem="OIc-cg-9hO" firstAttribute="leading" secondItem="Ga6-nx-lOn" secondAttribute="leading" constant="20" id="A7U-sd-fcL"/> 
      <constraint firstAttribute="centerY" secondItem="OIc-cg-9hO" secondAttribute="centerY" id="G9e-9W-aDS"/> 
      <constraint firstAttribute="centerX" secondItem="OIc-cg-9hO" secondAttribute="centerX" id="TrB-hI-7Kw"/> 
      <constraint firstAttribute="trailing" secondItem="OIc-cg-9hO" secondAttribute="trailing" constant="20" id="yjH-nf-D9U"/> 
     </constraints> 

Более обходной путь, чем ответ: но я добавил ограничения в коде следующим образом:

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.cellName 
                 attribute:NSLayoutAttributeWidth 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self 
                 attribute:NSLayoutAttributeWidth 
                multiplier:1.0 
                 constant:-20.0]]; 

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.cellName 
                 attribute:NSLayoutAttributeCenterX 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self 
                 attribute:NSLayoutAttributeCenterX 
                multiplier:1.0 
                 constant:0.0]]; 

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.cellName 
                 attribute:NSLayoutAttributeCenterY 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self 
                 attribute:NSLayoutAttributeCenterY 
                multiplier:1.0 
                 constant:0.0]]; 

Для того, для его работы мне нужны как закодированные ограничения, так и ограничения IB. Не знаю почему!

+0

Какой результат вы получаете в прошивкой 7? Я не вижу ничего в тех ограничениях, которые не должны работать в iOS 7. – rdelmar

+0

UILabel имеет точную высоту и ширину xib – user3534641

+1

У меня такая же настройка и проблема. Какие-нибудь решения? – Ravi

ответ

5

Похоже, что ограничения интерфейса Builder используют параметр «Ограничение на маржу», который не поддерживается на iOS7. Откройте ограничения в IB и проверьте, есть ли у кого-либо из них элементы с опцией «относительно поля».

См. What is "Constrain to margin" in Storyboard in Xcode 6 и What is "Constrain to margin" in Storyboard in Xcode 6 для получения более подробной информации об ограничении на маржу.

+1

Я даже не могу найти этот вариант, но в xml ничего нет. – user3534641

+0

это приведет меня в правильном направлении. –

4

Это случилось со мной, вам нужно проверить все ограничения в пользовательском интерфейсе и удалить относительную маржу, которая была введена с iOS 8 и не поддерживает iOS 7, не забывайте тех, в каких местах вы можете забыть (например, ячейки UITableView).

Чтобы найти этот параметр:

  1. Нажмите на управлении UI

  2. Перейти к Размер инспектору

  3. Дважды щелкните любое ограничение и проверить маржинальную вещь, просто отключить его и исправить свое ограничение, если что-то изменится.

enter image description here

Смежные вопросы