Xcode 6 Storyboard ma niewłaściwy rozmiar?


139

Zbudowałem nowy projekt od podstaw w Swift w Xcode 6 (Beta 1) i widziałem dziwne zachowanie w przypadku scenorysów i wyświetlanych przeze mnie wyników.

Zbudowałem prosty interfejs (jak pokazano poniżej) - z dołączonymi właściwościami kontrolera widoku. Kiedy uruchomię to w symulatorze, spodziewałbym się, że `` Hello, World '' będzie centralnym elementem interfejsu użytkownika - wydaje się jednak, że ten `` Square '' jest po prostu dopasowywany do ekranu iPhone'a i dlatego wyświetlany jest niewłaściwy widok (patrz poniżej ).

Moje pytanie brzmi: czy ktoś inny widział to zachowanie i jak je naprawił?

Dzięki!

Widok z edytora scenorysów

Inspektor atrybutów

Inspektor rozmiaru

Wyjście symulatora


dodaj ograniczenia automatycznego układu, które powinny to naprawić. obecnie projektujesz dla wszystkich układów, więc układy automatyczne pomogą Ci wyświetlić zawartość we „właściwym” miejscu.
Raz

8
Wskazówki: Używając asystenta edytora> automatyczny> Podgląd, będziesz mógł zobaczyć podgląd ekranu ze wszystkimi rozmiarami ekranu
Francescu,

Odpowiedzi:


81

Chociaż odpowiedź Asif Bilal jest prostszym rozwiązaniem, które nie obejmuje klas wielkości (które zostały wprowadzone w iOS 8.), zdecydowanie zaleca się przyzwyczajenie się do klas wielkości, ponieważ są one przyszłością, a ostatecznie i tak wskoczysz na niektóre punkt."


Prawdopodobnie nie dodałeś ograniczeń układu.

Wybierz etykietę, dotknij przycisku ograniczeń układu u dołu:

wprowadź opis obrazu tutaj

W tym menu dodaj szerokość i wysokość (NIE powinny być takie same jak moje), zaznaczając ich pole wyboru i kliknij dodaj ograniczenia. Następnie przeciągnij etykietę z wciśniętym klawiszem Control do głównego widoku, a po usunięciu kliknięcia powinieneś mieć opcje wyśrodkowania w poziomie i pionie w kontenerze. Dodaj oba i powinieneś być skonfigurowany.


1
Doskonale - to działało świetnie dla mnie - Dziękuję za pomoc (przyjmie twoją odpowiedź, gdy stoper zostanie podniesiony)
Wata cukrowa

1
Zapraszamy. Jest to domyślne zachowanie z autoukładaniem, które jest teraz domyślnie włączone. Pamiętaj, że ze względu na możliwe różne rozmiary / układy ekranu powinien istnieć sposób obliczania położenia widoku względem jego elementu nadrzędnego, a automatyczne układanie rozwiązuje ten problem. jeśli nie dodasz tych ograniczeń, widok tworzy je automatycznie w czasie wykonywania, ale względem lewego górnego rogu. Jeśli potrzebujesz czegoś innego (prawie zawsze potrzebujesz czegoś innego), musisz jawnie określić ograniczenia.
Can Poyrazoğlu

4
Zwróć uwagę, że przeciąganie kontrolki (co może być niewygodne) nie jest konieczne. Przycisk po lewej stronie przycisku wybranego na tym obrazku otwiera menu, które umożliwia przypięcie środków w poziomie i pionie.
jrturton

Masz rację… Jestem przyzwyczajony do przeciągania kontroli, dlatego tak to powiedziałem.
Can Poyrazoğlu,

@ CanPoyrazoğlu - Wspominasz o „Wybierz etykietę”. Jaka etykieta? Mam ten sam problem z nowym projektem iPhone'a, w którym nie mam etykiet ani innych elementów interfejsu użytkownika. Mój pierwszy projekt w Xcode 6, używając Objective C.
rattletrap99

253

Wykonaj poniższe czynności, aby rozwiązać problem

W Storyboard wybierz dowolny widok, a następnie przejdź do Inspektora plików. Odznacz pole „Użyj klas rozmiaru”, poprosisz o zachowanie danych klas rozmiaru dla: iPhone / iPad. Następnie kliknij przycisk „Wyłącz klasy rozmiaru”. Spowoduje to, że rozmiar widoku scenorysu przy wybranym urządzeniu.


8
To jest poprawna odpowiedź, jeśli otrzymujesz kontroler widoku 600x600, na przykład standardowy kontroler widoku dla iPhone'a.
Fraggle

5
To powinna być prawidłowa odpowiedź (przynajmniej dla tych, którzy pracują tylko na platformie innej niż Universal)
Raptor

36
Nie wiem, dlaczego ludzie oznaczyli to jako właściwą odpowiedź ... pierwsza z nich to sposób, w jaki należy to zrobić ... Jeśli nie lubisz ograniczeń układu, to idziesz w odwrotnym kierunku ... Apple wykorzystuje dobry sposób na programowanie dla wszystkich rozmiarów iPhone'a i iPada, a chcesz po prostu wrócić do starych rzeczy? Ponieważ nie możesz sobie pozwolić na aktualizację? Nigdy nie głosowano, ale wydaje się, że ta odpowiedź dezorientuje ludzi i sprawia, że ​​używa starego podejścia (które zostanie wycofane) zamiast zachęcać do korzystania z nowych rzeczy ...
Raphael Ayres

3
Najlepsza odpowiedź dla wszystkich, którzy są przyzwyczajeni do scenorysów na iPhonie / iPadzie
mamarx

3
Użyj ograniczeń układu ... Apple robi to w ten sam sposób, w jaki działa Android. Widok nie ma formy ... Czasami może to być uciążliwe, ale jeśli wymusisz rozmiar, Twoja aplikacja będzie źle wyglądać na urządzeniach o różnych rozmiarach. Jeśli chcesz, aby przycisk pojawiał się w prawym dolnym rogu, po prostu utwórz dla niego 2 ograniczenia i zbanuj ... bez wyboru X lub Y. Wszystko zostanie ustawione przez Silnik. Użyj wewnętrznych rozmiarów. Użyj swojej wyobraźni. Użyj więzów relacyjnych. Naucz się tego gówna.
Raphael Ayres

18

Jeśli używasz Xcode 6 i projektujesz pod iOS 8, żadne z tych rozwiązań nie jest poprawne. Aby uzyskać poprawny rozmiar widoków tylko dla iPhone'a, nie wyłączaj klas rozmiarów, nie wyłączaj wywnioskowanych metryk i nie ustawiaj ograniczeń (jeszcze). Zamiast tego użyj kontrolki klasy rozmiaru, która jest łatwym do przeoczenia przyciskiem tekstowym u dołu programu Interface Builder, który początkowo brzmi „WAny hAny”.

Kliknij przycisk i wybierz Kompaktowa szerokość, standardowa wysokość. Zmieni to rozmiar widoków i obejmie wszystkie orientacje pionowe iPhone'a. Dokumenty firmy Apple można znaleźć tutaj: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/SelectingASizeClass.html lub wyszukaj „Wybieranie klasy rozmiaru w programie Interface Builder”


Wydaje mi się, że warto przeczytać całą pomoc dotyczącą projektowania klas rozmiarów w linku, tj. Od informacji o projektowaniu dla wielu klas rozmiarów po wdrażanie aplikacji z klasami rozmiaru we wcześniejszych wersjach systemu iOS .
Franklin Yu

Jest to świetne rozwiązanie, jeśli chcesz zachować układ automatyczny, ale chcesz, aby widoki scenorysu były wyświetlane jako poziomy lub pionowy zamiast kwadratu.
stephenspann

5

W Storyboard wybierz ViewController i przejdź do Atribute Inspector. Na samej górze, w obszarze Symulowane metryki znajdują się właściwości Rozmiar i Orientacja, które są ustawione na Wywnioskowane. Zmień je na żądane wartości.

Aby aplikacja wyświetlała się poprawnie na ekranie o innym rozmiarze, musisz również skonfigurować ograniczenia, jak opisano w Can Poyrazoğlu w pierwszym poście.


5

Miałem ten problem w xcode 6 i jest sposób na rozwiązanie konfliktów zmiany rozmiaru. Jeśli wybierzesz widok, u dołu zobaczysz ikonę, która wygląda jak | -Δ- |. Jeśli go klikniesz, twój projekt zmieni rozmiar dla różnych urządzeń.


Tak, a po wybraniu symbolu trójkąta kliknij Dodaj brakujące ograniczenia i gotowe, widok zmieni rozmiar zgodnie z rozmiarem urządzenia, jeśli jego uniwersalna aplikacja
vishal dharankar

3

Przejdź do Inspektora atrybutów (prawy górny róg) W Symulowane metryki, które mają właściwości Rozmiar, Orientacja, Pasek stanu, Górny pasek, Dolny pasek. W przypadku ROZMIAR zmień Wnioskowany -> Dowolny.


+1 @Rachel dziękuję za tę pomocną wskazówkę dotyczącą Symulowane metryki -> Rozmiar: „Dowolny” (inaczej „włącz niestandardowy rozmiar dla pliku xib wielokrotnego użytku z widokiem niestandardowym”).
tydzień

3

Na stronie scenorysu przejdź do Inspektora plików i odznacz „Użyj klas rozmiaru”. Powinno to zmniejszyć twój kontroler widoku do zwykłego rozmiaru iPhone'a, który znasz. Pamiętaj, że użycie „klas wielkości” pozwoli Ci zaprojektować projekt na wielu urządzeniach. Po usunięciu zaznaczenia Xcode wyświetli ostrzeżenie w następujący sposób. To powinno być oczywiste.

„Wyłączenie klas rozmiarów ograniczy ten dokument do przechowywania danych dla jednej rodziny urządzeń. Dane dla klasy rozmiaru najlepiej reprezentującej urządzenie docelowe zostaną zachowane, a wszystkie inne dane zostaną usunięte. Ponadto pliki zostaną przekonwertowane na -adaptacyjne odpowiedniki. "


3

Dla każdego, kto używa XCode 7, bardzo łatwo jest zaprojektować dla określonego rozmiaru urządzenia (zamiast domyślnego płótna kwadratowego).

W programie Interface Builder wybierz kontroler ViewController lub scenę z menu po lewej stronie. Następnie w sekcji Show the Attributes Inspectorprzejdź do Simulated Metricsi wybierz żądaną pozycję Sizez menu rozwijanego.


To tylko pozwoli ci zaprojektować scenorys dla tego urządzenia. Po uruchomieniu aplikacji jej wygląd może się znacznie różnić dla różnych rozmiarów ekranu.
Joey Tawadrous

@JoeyTawadrous Exactly. Ale odpowiada na zadane pytanie :)
Kapłan

2

Prawdopodobnie użyjesz „Rozwiąż problemy z automatycznym układem” (ikona trójkąta w prawym dolnym rogu w widoku scenorysu), aby dodać / zresetować sugerowane ograniczenia (Xcode 6.0.1).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.