Problemy z układem po aktualizacji do Xcode 8

102

Oto przed i po jednym z moich ekranów po uaktualnieniu do Xcode 8.
Wszystko, co zrobiłem, to otworzyłem main.storyboard i stamtąd zbudowałem i uruchomiłem moją aplikację na moim telefonie.
W mojej kontroli wersji widzę, że Xcode wprowadza wiele zmian w mojej tablicy main.storyboard tylko ode mnie jej otwarcia.
Za każdym razem, gdy usuwam te zmiany, widzę, czego używam, aby zobaczyć w Xcode 7.3.1.
Ale gdy tylko ponownie otworzę narzędzie do tworzenia interfejsów z moją scenorysem, widzę, że te zmiany wracają na swoje miejsce.

Czy jest coś, co mogę tutaj zrobić?

Przed Xcode 8

wprowadź opis obrazu tutaj

Po aktualizacji do Xcode 8

wprowadź opis obrazu tutaj

user2726072
źródło
Spróbuj ponownie otworzyć XCode 8 z nowym źródłem (zachowaj wszystkie zmiany, które wprowadziłeś wcześniej). Teraz, kiedy otworzysz scenorys, zaznacz wszystkie elementy interfejsu użytkownika i kliknij „Aktualizuj ramki”. To może rozwiązać twój problem.
d1str0
6
Czy możesz zgłosić błąd na bugreport.apple.com i dołączyć scenorys, dla którego to się dzieje? Chcielibyśmy to dokładniej przeanalizować.
Quinn Taylor
1
Mam dokładnie ten sam problem. Po otwarciu mojego storyboardu w Xcode8 i zaakceptowaniu okna dialogowego „Wybierz początkowy widok urządzenia” wszystko zachowuje się dziwnie. Kiedy aktualizuję wszystkie ramki, IB wygląda dobrze, ale po skompilowaniu aplikacja jest całkowicie zepsuta. Przetestowałem to z 4 aplikacjami.
Cherrypig
@QuinnTaylor Mam podobny problem, po tym, jak Xcode 8 konwertuje moją storyboard, UIImageViews w UITableViews nie pokazują żadnych treści, chociaż ich kontur jest widoczny w Debug View Hierarchy. Nie dotyczy to innych obiektów tej samej klasy, które znajdują się w UICollectionViews.
Manuel
XIB lub Storyboard ustawiają domyślnie jako starszą wersję 7.xi Zapisz i zamknij. Rozwiązanie tymczasowe, ale działa. Nie otwieraj ponownie po zakończeniu zapisywania i zamykania. W przeciwnym razie ponownie należy wykonać te same kroki od początku.
Bhavesh Kumbhani

Odpowiedzi:

111

Miałem podobny problem z obrazami tabeli, które nie pojawiały się po przekonwertowaniu pliku storyboardu na kompatybilny z Xcode8. Wygląda to na błąd w Xcode8, więc dopóki nie zostanie wydana poprawka błędu, oto obejście:

  1. Otwórz scenorys w Xcode 8 i wybierz początkowy widok urządzenia. Wprowadź zmiany w normalny sposób.
  2. Po wprowadzeniu zmian wybierz scenorys -> Inspektor plików -> Otwiera się w -> Wybierz „Xcode 7.x”.

wprowadź opis obrazu tutaj

  1. Po wyświetleniu monitu wybierz opcję „Zapisz i zamknij”
  2. Twoje zmiany w scenorysie zostaną zapisane, a scenorys będzie działał tak, jak przed Xcode8.

Jeśli chcesz wprowadzić inne zmiany w pliku serii ujęć, wykonaj ponownie poniższe kroki.

David T.
źródło
Wow +1 za to na pewno. Walczyłem z tym w iOS 10 w moim TodayExtension. Dopiero gdy zawęziłem rzeczy, analizując różnice git, zobaczyłem podejrzane edycje xml storyboardów dodawane przez Xcode 8. Po zapisaniu dokumentu storyboardu dla Xcode 7 (po wprowadzeniu zmian), mogę teraz budować i wysyłać używając Xcode 8 dla iOS 10. Dzięki.
John Erck,
Z pewnością wygląda na błąd. Zapisywanie jako otwierane w Xcode 7.x zadziałało dla mnie jako tymczasowe obejście.
Steve A
Spędziłem ostatnie 3 dni na naprawianiu całego zepsutego układu z miejsca na miejsce w Xcode8, dopóki nie znalazłem tego posta. Powinienem bardziej ufać ludziom takim jak wy niż Apple. Nie mogę uwierzyć, że to zmarnowało tyle mojego czasu. Bardzo dziękuję Davidowi za to!
Xu Yin
@XuYin Czy powinniśmy to zrobić dla każdego storyboardu? Mam na myśli co, jeśli mam inny scenorys w moim projekcie? A co z plikami Xib? czy powinienem to zrobić również dla nich?
Honey
@ Kochanie, nie zrobiłem tego na Storyboard, ale zrobiłem to na każdym pliku XIB, z którym mam problem. ale myślę, że możesz chcieć wypróbować to również w scenorysie, jeśli zobaczysz dziwny problem z układem. ponieważ naprawa zajmie tylko 5 sekund. a po przebudowaniu aplikacji powinieneś być w stanie bardzo szybko zobaczyć poprawkę.
Xu Yin
14

XIB lub Storyboard ustawiają domyślnie jako starszą wersję 7.xi Zapisz i zamknij. Rozwiązanie tymczasowe, ale działa. Nie otwieraj ponownie po zakończeniu zapisywania i zamykania. W przeciwnym razie ponownie należy wykonać te same kroki od początku.wprowadź opis obrazu tutaj

Bhavesh Kumbhani
źródło
6
To nie pomaga, ponieważ muszę popracować nad plikiem. Wszystko to polega na zapisaniu pliku w celu zapewnienia zgodności wstecznej. Nie pozwala na edycję xib w Xcode 8.
jowie
Robię to, ale ponownie, gdy wybieram plik XIB z listy rozwijanej, pokazuje tylko
Xcode
8

Ech ten sam problem. Częściowo udało mi się to naprawić w następujący sposób ( dla Xcode w wersji 8.1 (8B62) )

W zarysie dokumentu Storyboard kliknąłem każdą scenę, która miała żółtą strzałkę wskazującą na pewne problemy z układem (numer 1 na zrzucie ekranu)

Po tym, dla każdej problematycznej sceny, musiałem kliknąć małą ikonę "Aktualizuj klatki" (numer 2 na zrzucie ekranu), co naprawiało wszystkie problemy z układem każdej sceny.

wprowadź opis obrazu tutaj

Jednak jedna scena w moim przypadku nadal była w stanie płaczu po przejściu z Xcode7 do Xcode8. Musiałem to naprawić ręcznie, dostosowując ograniczenia lub dodając brakujące wiązania.

Uff, niezła niespodzianka z XCode8 i Storyboards. Jeśli korzystałeś z edytora AppCode, nie będziesz miał takiego problemu, ponieważ nie obsługuje on Storyboardów; P

Powodzenia!

TekMi
źródło
7

Xcode 8.1 Beta 2 rozwiązuje ten problem. Sprawdź ten link do pobrania

https://developer.apple.com/download/

Maniganda saravanan
źródło
4
Nie sądzę ... :(
Vaibhav Saran,
Xcode 8.3.2 napotyka ten sam problem. Fck Xcode and Apple :(
lee
6

Proszę śledzić wątki, aby znaleźć możliwe rozwiązanie: (wierzę, że zdarza się to wielu programistom).
Xcode 8 GM seed Problem ze scenorysem
Xcode 8 - Poprzednie storyboardy

ulegają zniekształceniu (użyłem dowolnej szerokości 600) Po zaktualizowaniu Xcode do Xcode 8 zmieniło się wszystkie moje ViewControllers. W rezultacie cały układ został zniekształcony.
Obecnie widzę tylko 3 rozwiązania tego problemu (nie ufałbym czekaniu na naprawę wkrótce).

1. Przejdź do każdego Viewcontroller i napraw go przez Update Frames.

2.Przejdź do głównego ViewController, Size Inspector -> Freeform -> 600ponieważ większość kontrolerów sądzi, że zmieni on rozmiar dla nich wszystkich (uważaj na wpływ nowych funkcji Apple, które chcę wprowadzić).

3. Odrzuć zmiany w git dla storyboardu (nie sugerowałbym tego, ponieważ Apple również wstawił kilka aktualizacji, które mogą być ważne dla Xcode).

Dodatkowe łącze do nowych funkcji AutoLayout w Xcode 8 (WWDC16): Adaptacja aplikacji, część 1

Mike.R
źródło
1
Opcja 1 jest najbardziej sensowna i u mnie zadziałała. Jak zauważa Mike.R, bądź ostrożny, próbując `` oszukać '' XCode, aby naprawił rzeczy, ponieważ więcej problemów na torze jest nieuniknione.
arcady bob
Skorzystałem również z opcji 1 (myślę, że jest bezpieczniejsza). Ale jest to czasochłonne.
Mike.R
5

W moim przypadku sprawdzają się rozwiązania zaproponowane przez Akhila Kateję i muszę też zresetować Szerokość i Wysokość głównego widoku:

1) Ustaw Rozmiar widoku na Dowolna forma

wprowadź opis obrazu tutaj

2) Zresetuj szerokość i wysokość widoku do oryginalnego rozmiaru:

wprowadź opis obrazu tutaj

Na koniec zapisz i gotowe.

chrześcijański mini
źródło
4

Dla mnie rozwiązaniem było po prostu kliknięcie kontrolera UIViewController, który ma problemy, a następnie Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

Zmieniono układ widoków, aby dopasować istniejące ograniczenia w oparciu o nowo wybrany widok domyślny (w moim przypadku iPhone 7).

Zwróć również uwagę: jeśli pojawi się ostrzeżenie o niewłaściwym umieszczeniu paska nawigacji, tak jak ja, po prostu wybierz UINavigationController / UIViewController, a następnie Attributes Inspector > Bar Visibility > Shows Navigation Bar- wyłącz je i włącz ponownie.

whycodewhyyyy
źródło
3

Ustawianie Zobacz Rozmiar do Freeform z wywnioskować pracował dla mnie. Można go znaleźć pod nagłówkiem Symulowane metryki w Inspektorze atrybutów .

Akhil Kateja
źródło
3

Miałem ten sam problem i rozwiązałem go, wymuszając aktualizację ograniczeń widoku kontrolera. Umieść następujący kod w swojej funkcji viewDidLoad ()

self.view.layoutIfNeeded()
Bill Panagiotopoulos
źródło
1
Pozdrawiam Bill! że „layoutIfNeeded” zadziałał dla mnie! (Po kilku godzinach próbowania wszystkiego innego ..)
Ethan Halprin,
3

Wybrałem każdy kontroler i kliknąłem „Aktualizuj ramki” i naprawiłem układ.

Mayckon Barbosa
źródło
3

Odpowiedź z @ david-truong ( https://stackoverflow.com/a/39589860/1407528 ) nie działa w moim przypadku, więc jeśli jesteś w takiej samej sytuacji, spróbuj tego:

Jeśli masz wszystkie swoje urządzenia zaktualizowane do iOS 10+, ta wersja Xcode nie rozpozna tych urządzeń jako kompatybilnych urządzeń. Więc spróbuj z tą sztuczką:

  • Idź do: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Skopiuj foldery związane z iOS 10 lub 10.1 do: / Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Otwórz projekt za pomocą Xcode 7.3.1 (uruchom ponownie Xcode, jeśli już go masz)
  • Wybierz podłączone urządzenie z systemem iOS 10+
  • Push Run

Uwaga: nowe funkcje, takie jak Swift, nie będą dostępne przy użyciu tej sztuczki, ale powinieneś być w stanie załadować i zbudować swój projekt.

goe
źródło
3

Mam nadzieję, że to pomoże

Kiedy zaktualizowałem Xcode z wersji 7.3 do Xcode 8 i uruchomiłem aplikację, niektóre widoki są doskonale wyświetlane, ale niektóre są zniekształcone. Następnie sprawdziłem plik nib i poprosił mnie o wybranie określonego rozmiaru urządzenia, a następnie wyświetlenie stalówki zgodnie z tym rozmiar urządzenia, który nie jest obcy Any-Any(Xcode 7.3) . Więc wszystkie pliki nibs nie wyświetlają się poprawnie.

Rozwiązanie działa ode mnie: - naciśnij żółtą strzałkę jak na obrazku poniżej

wprowadź opis obrazu tutaj

wyświetli się wyskakujące okienko z opcjami takimi jak

wprowadź opis obrazu tutaj

wybierz Update Framesz Apply to all views in containerzaznaczonym. to rozwiąże około 90% zniekształconego interfejsu użytkownika, a resztę problemu z ograniczeniami automatycznego układu można rozwiązać ręcznie.

Anurag Bhakuni
źródło
Może to również zepsuć układy. IMHO należy to zrobić z dużą ostrożnością, jednym widokiem na raz i sprawdzeniem, czy wszystko się udało, zanim przejdziesz dalej.
brainray
tak, oczywiście, musisz poświęcić na to trochę czasu, a to rozwiązanie może ci pomóc w dłuższej perspektywie, ponieważ chcesz zaktualizować część interfejsu użytkownika.
Anurag Bhakuni
1

Aby rozwiązać podobny problem, skonfigurowałem xib jako Freeform (nie wywnioskował) ORAZ zapisałem plik xib jako zgodny z Xcode 7.x. W moim przypadku wymagane były oba kroki. Mam nadzieję że to pomogło!

Juan Sagasti
źródło
1

Zauważyłem nowy przycisk w Xcode 8.2 (sprawdź pomarańczowe kółko na obrazku). To da ci pomoc.

Kroki: 1. Otwórz scenorys i wybierz dowolne urządzenie 2. Po prostu wybierz kontroler widoku 3. Kliknij wspomniany przycisk (jak na obrazku) 4. Zaktualizuje ramkę dla tego kontrolera widoku i możesz kontynuować

Nie znalazłem lepszego rozwiązania niż to. Odpowiedz, jeśli znalazłeś.

Zrzut ekranu IB

Shahul Hasan
źródło
Nic się nie stało.
Muju
0

Aktualizuj ograniczenia i podglądy układu w viewdidload rozwiązuje problem

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
karthikPrabhu Alagu
źródło