Podczas korzystania z automatycznego układu w serii ujęć istnieje opcja, aby zachować ograniczenie, czy nie, przy użyciu opcji "Zainstalowane". Wyłączenie go spowoduje, że zachowa się tak, jakby nie dodać tego ograniczenia - nie będzie to miało żadnego efektu. Możesz skonfigurować stan instalacji dla różnych klas wielkości w Kreatorze interfejsów i możesz zmienić tę wartość programowo, ustawiając jej właściwość active
na true
lub false
.Gdzie zmienić "zainstalowany" dla ograniczenia automatycznego układu?
W mojej aplikacji chcę, aby ograniczenie było instalowane tylko wtedy, gdy urządzenie jest w portretie - powinno zostać "odinstalowane" podczas obracania do pejzażu. Można to zrobić dla iPhone'ów odznaczając zainstalowane dla dowolnej wysokości kompaktowej. (Wydaje się, że nie działa to całkiem poprawnie, ponieważ łamie to ograniczenie ze względu na sprzeczne ograniczenia podczas obracania do pejzażu, gdy nie powinno być nawet instalowane, ale niezależnie od tego, czy interfejs użytkownika zawsze pojawia się zgodnie z oczekiwaniami.) Ale nie ma sposobu, aby odinstalować ograniczenie dla iPada w krajobrazie w Interface Builder (regularna szerokość regularnej wysokości w obu orientacjach).
Gdzie jest właściwe miejsce do włączania/wyłączania active
dla NSLayoutConstraint
s podczas obracania urządzenia? W jakiej metodzie rotacji zmiana tego stanu spowoduje pożądane zachowanie - instaluje się tylko w przypadku portretu? Jeśli ta metoda nie zostanie wywołana podczas uruchamiania aplikacji, w jakiej innej metodzie należy ją umieścić oprócz metody rotacji?
Próbowałem umieszczając poniższy kod w viewDidLoad
i viewWillTransitionToSize
ale to powoduje pewne nieoczekiwane zachowanie podczas jazdy na iPada:
- Uruchamianie aplikacji w krajobrazie powoduje ograniczenie być aktywny, mimo aktywnej ustawiono wartość "fałsz", powoduje to zerwanie ograniczenia, a interfejs użytkownika nie jest wyświetlany zgodnie z oczekiwaniami.
- Uruchamianie aplikacji w zestawach portretów aktywnych do wartości true (było już zainstalowane w IB), więc działa zgodnie z oczekiwaniami.
- Uruchamianie aplikacji w pionie i obracając urządzenie do pejzażu działa zgodnie z oczekiwaniami - ograniczenie jest ustawione na nieaktywne, nie łamie ograniczenia, interfejs użytkownika pojawia się zgodnie z oczekiwaniami
- Uruchamianie aplikacji w pionie, obracanie do orientacji poziomej i powrót do portretu powoduje, że interfejs jest wyświetlany poprawnie, ale przerywa to ograniczenie, które jest ustawione na aktywne:
Jeśli odinstaluję ograniczenie w programie Interface Builder, a następnie wykonam powyższe scenariusze, otrzymam zasadniczo przeciwne zachowanie.
if size.width > size.height {
self.myConstraint.active = false
} else {
self.myConstraint.active = true
}