2014-09-21 8 views
6

Używam scenorysów i Xcode 6 do projektowania widoków aplikacji, ale mam do czynienia z tym problemem: Chcę przypisać różne pozycje subskrybentów dla trybów portretu i krajobrazu. Na przykład:Różne widoki portretów/pejzażu w scenorysach i szybkich

Portrait Landscape

Ponieważ teraz mam to osiągnąć programowo z willRotateToInterfaceOrientation i paska stanu, aby uzyskać orientację iPad.

Z Xcode 6, układy iPhone dla portretu i krajobrazu są różne, ale są takie same dla iPada (zwykłe, zwykłe). Możliwe jest osiągnięcie tych pozycji z ograniczeniami?

Dzięki.

Odpowiedz

7

Tak, można to zrobić z ograniczeniami.

Najpierw należy utworzyć wiązania do podglądu, a nie do najbliższego widoku. Sąsiadujące widoki będą zmieniać pozycje, więc NIE chcemy, aby ograniczenia były względne względem innych widoków. Zobacz poniższy zrzut ekranu, aby dowiedzieć się, jak ustawić ograniczenia.

Constraint Setup

Następnie odwołuje ograniczeń będziesz modyfikujących do IBOutlets więc możemy modyfikować je programowo. Na swoim przykładzie, byłyby one ograniczenia:

@IBOutlet var greenViewTrailingConstraint: NSLayoutConstraint! 
@IBOutlet var greenViewBottomConstraint: NSLayoutConstraint! 

@IBOutlet var redViewTopConstraint: NSLayoutConstraint! 
@IBOutlet var redViewLeadingConstraint: NSLayoutConstraint! 
@IBOutlet var redViewBottomConstraint: NSLayoutConstraint! 

@IBOutlet var blueViewTrailingConstraint: NSLayoutConstraint! 
@IBOutlet var blueViewTopConstraint: NSLayoutConstraint! 
@IBOutlet var blueViewLeadingConstraint: NSLayoutConstraint! 

Wreszcie, zaktualizuj stałych więzów opartych na UIInterfaceOrientation. Ponownie, za pomocą przykładu, kod wygląda mniej więcej tak:

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) { 
    let padding: CGFloat = 16.0 

    // since we're calling this before the rotation, the height and width are swapped 
    let viewHeight = self.view.frame.size.width 
    let viewWidth = self.view.frame.size.height 

    // if landscape 
    if UIInterfaceOrientationIsLandscape(toInterfaceOrientation) { 
     greenViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     greenViewBottomConstraint.constant = padding 

     blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     blueViewTrailingConstraint.constant = padding 
     blueViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 

     redViewTopConstraint.constant = padding 
     redViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
    } else { // else portrait 
     greenViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     greenViewTrailingConstraint.constant = padding 

     blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     blueViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     blueViewLeadingConstraint.constant = padding 

     redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     redViewBottomConstraint.constant = padding 
     redViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
    } 
} 
+0

Nicea rozwiązanie! ! Ale właśnie zastanawiałem się, czy dobrze jest dodawać i usuwać ograniczenia programowo podczas obrotu urządzenia. –

+0

@RashmiRanjanmallick, Dobre pytanie! Jednak nie dodajemy/usuwamy ograniczeń. Po prostu modyfikujemy ich stałe. Modyfikowanie stałych ograniczeń jest powszechną praktyką, szczególnie w animacji UIView lub rotacji urządzenia. –

+0

Dzięki, po prostu zastanawiam się, dlaczego na Ziemi nie stworzyli scenariusza, jak wybrać tryb portretu i ustawić układ pionowy, a następnie wybierz tryb krajobrazu i skonfigurować układ krajobrazu. – fullMoon

1

Wiem, że to stary post, ale tylko dla info.I próbowali poniższe kroki i działa zgodnie z oczekiwaniami.

Krok 1. Wybierz kontroler widoku, wybierz dowolny z kontroli klasy wielkości. I dodaj widoki w tym trybie. Any Mode Krok2. Zmień tryb na pionowe wszystkie iPhony z kontrolki klasy wielkości, dodaj ograniczenia dla widoku w trybie portretu. Potrait mode Krok3. Podobnie Zmień tryb, aby poziome wszystkie iPhony, dodaj ograniczenia dla widoku w trybie poziomym.

Uwaga: Te ograniczenia są niezależne teraz do portretu i krajobrazu

0

Naciśnij plus „+” obok Stała z przymusu i dodać wariacje dla różnych ekranów:

enter image description here

Powiązane problemy