2014-10-03 27 views
5

Używam autolayout w ramach UICollectionViewCell. Super prosty układ: tylko UILabel. Chcę, aby UILabel zajmował całą szerokość minus wstawka o wielkości 20 pikseli i był wyśrodkowany w komórce zarówno w pionie, jak iw poziomie. Ustawiłem ograniczenia, które właśnie to robią. Jeśli uruchomię go na dowolnym urządzeniu i symulatorze ios 8, działa idealnie. Jednak gdy uruchomię go na niektórych urządzeniach ios 7, więzy nie działają. Próbowałem przeglądać dokumenty Apple, ale żadna z tych zmian nie wydaje się być związana z automatycznym układem.AutoLayout działa w ios 8, ale nie w ios 7?

Oto kod źródłowy XML choć wątpię, to znaczy tyle:

<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> 

Więcej o obejście niż odpowiedź: ale dodałem ograniczeń w kodzie następująco:

[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]]; 

Na zamówienie aby to działało, potrzebowałem zarówno kodowanych ograniczeń, jak i ograniczeń IB. Nie wiem dlaczego!

+0

Jaki wynik dostajesz w iOS 7? Nie widzę niczego w tych ograniczeniach, które nie powinny działać w iOS 7. – rdelmar

+0

UILabel ma dokładną wysokość i szerokość xib – user3534641

+1

Mam dokładnie takie same ustawienia i problemy. Jakieś rozwiązania? – Ravi

Odpowiedz

5

Wygląda na to, że ograniczenia Konstruktora interfejsu używają opcji "Ograniczenie do marginesu", która nie jest obsługiwana w systemie iOS7. Otwórz ograniczenia w IB i sprawdź, czy któryś z nich ma elementy z zaznaczoną opcją "względem marginesu".

Więcej informacji na temat ograniczenia do depozytu zabezpieczającego można znaleźć w pozycjach What is "Constrain to margin" in Storyboard in Xcode 6 i What is "Constrain to margin" in Storyboard in Xcode 6.

+1

Nie mogę nawet znaleźć tej opcji, ale nie ma nic w xml – user3534641

+0

to prowadzi mnie we właściwym kierunku. –

4

To mi się przydarzyło, musisz sprawdzić wszystkie ograniczenia w interfejsie i usunąć Relative to Margin, który został wprowadzony z iOS 8 i nie obsługuje iOS 7, nie zapomnij o tych w niektórych miejscach, w których możesz zapomnieć (podobnie jak komórki UITableView).

Aby znaleźć tę opcję:

  1. Stuknij w kontroli UI

  2. Przejdź do Inspektora Rozmiar

  3. Dwukrotnie kliknij żadnych ograniczeń i sprawdź rzecz marginesu, po prostu go wyłączyć i napraw swoje ograniczenia, jeśli coś się zmieni.

enter image description here

Powiązane problemy