Otworzyłem istniejący projekt iOS za pomocą Xcode6 beta6, a Xcode wyświetla następujące ostrzeżenie dla plików Storyboard i Xib:
Automatyczna preferowana maksymalna szerokość układu nie jest dostępna w wersjach iOS starszych niż 8.0
Próbowałem rozwiązać ostrzeżenie, ustawiając szerokość tak wyraźnie, jak poniżej:
To jednak nie rozwiązało ostrzeżeń. Jak można je usunąć?
ios
autolayout
ios8
xcode6
mononukleoza
źródło
źródło
Odpowiedzi:
Aktualizacja 3:
To ostrzeżenie może być również wyzwalane przez etykiety, które mają
numberOfLines
wartość inną niż 1, jeśli docelowy poziom wdrożenia jest ustawiony na 7.1. Jest to całkowicie powtarzalne w przypadku nowego projektu z jednym widokiem.Kroki ku reprodukcji:
Zapisałem następujący radar: rdar: // problem / 18700567
Aktualizacja 2:
Niestety, jest to znowu kwestia w wydanej wersji Xcode 6. Zauważ, że w większości przypadków możesz ręcznie edytować storyboard / xib, aby rozwiązać problem. Per Charles A. w komentarzach poniżej:
Aktualizacja 1:
Ten błąd został teraz naprawiony w Xcode 6 GM.
Oryginalna odpowiedź
To jest błąd w Xcode6-Beta6 i XCode6-Beta7 i na razie można go bezpiecznie zignorować.
Inżynier firmy Apple na forach Apple, deweloper miał to do powiedzenia na temat błędu:
Alternatywnie możesz obejść ten problem, używając inspektora plików w serii ujęć lub xib, o którym mowa, i zmień opcję „Kompilacje dla” na „Kompilacje dla systemu iOS 8.0 i nowszych”
źródło
<label(?!.*preferredMaxLayoutWidth)
aby znaleźć etykiety, które pomijająpreferredMaxLayoutWidth
atrybut / wartość. Jeśli dodasz dopreferredMaxLayoutWidth="0"
takich wierszy, będzie to równoznaczne z zaznaczeniem jawnym i ustawieniem wartości0
.numberOfLines
jest ustawiony na cokolwiek innego niż 1, ostrzeżenie będzie się pojawiać niezależnie od tego, czy zostałopreferredMaxLayoutWidth
ustawione, czy nie.preferredMaxLayoutWidth
jawnego 0 ostrzeżenie zniknie bez względu nanumberOfLines
wartość. Ale może to zostało naprawione w aktualizacji Xcode dziś rano?Aby znaleźć etykiety problemów w dużym scenariuszu, wykonaj moje kroki poniżej.
Następnie ujawnij swoją scenorys jako plik źródłowy.
Szukaj. Powinieneś być w stanie dość łatwo stwierdzić, która to etykieta stąd, patrząc na treść.
Po znalezieniu etykiety rozwiązaniem, które działało dla mnie, było ustawienie „preferowanej szerokości” na 0.
BTW, zawsze możesz szybko uzyskać identyfikator elementu interfejsu, wybierając element i sprawdzając pod identyfikatorem inspektora. Bardzo przydatny.
źródło
Możesz rozwiązać ten problem bez otwierania scenorysu jako źródła . To ostrzeżenie jest wywoływane przez UILabels, jeśli liczbaOpLinii! = 1, a docelowy poziom wdrożenia wynosi <8.0
JAK TO ZNALEŹĆ?
źródło
Rozwiązanie jest dość proste
Wystarczy włączyć kompilacje dla iOS 8 i nowszych
źródło
Teraz moja wersja Xcode to 6.1. Ale dostałem też to ostrzeżenie. bardzo mnie to denerwuje. po wyszukiwaniu raz po raz. znalazłem rozwiązanie.
Powód: Musisz ustawić swoje linie UILabel> 1 w Storyboard.
Rozwiązanie: ustaw atrybut UILabel Lines na 1 w Storyboard. zrestartuj swój Xcode. To działa dla mnie, mam nadzieję, że może pomóc większej liczbie osób.
Jeśli naprawdę chcesz pokazać swoje słowa w więcej niż 1 linii. powinieneś to zrobić w kodzie.
źródło
Podsumowując, dla mnie wykonanie dwóch powyższych instrukcji, aby zmienić wszelkie przypadki, w których numberOfLines = od 0 do 1 lub więcej, i ręczne dodanie preferowanego MaxMayLayoutWidth = „0” do każdej instancji etykiety w źródle scenorysu naprawiło wszystkie moje ostrzeżenia.
źródło
Ponieważ nie mam 50 reputacji Stackoverflow, nie będę mógł komentować drugiej najlepszej odpowiedzi. Znaleziono kolejną sztuczkę polegającą na znalezieniu winowajcy w Storyboard.
Więc kiedy znasz identyfikator etykiety, otwórz scenorys w osobnej karcie z wyświetlonymi kontrolerami widoku i po prostu wykonaj komendę F i komendę V, a zabierze Cię prosto do tej etykiety :)
źródło
Uruchomiłem go, wybierając oryginalny układ, który miałem w wyborze W / H. Storyboard działa zgodnie z oczekiwaniami i błąd zniknął.
Upewnij się także, że pracujesz na iOS 8.0. Sprawdź to w ogólnych ustawieniach projektu.
Tutaj należy nacisnąć.
źródło
Miałem ten problem i byłem w stanie go naprawić, dodając ograniczenia określające maksimum dla etykiety.
Po upuszczeniu etykiety wielowierszowej nie ma ustawionego ograniczenia wymuszającego szerokość w widoku nadrzędnym. Tutaj zaczyna się nowa PreferredMaxWidth. W iOS 7 i wcześniejszych musisz samodzielnie określić maksymalną szerokość. Po prostu dodałem ograniczenie 10px do lewej i prawej strony etykiety.
Możesz także dodać ograniczenie szerokości <=, które również rozwiązuje problem.
Więc to nie jest błąd, po prostu sam musisz zdefiniować maksymalną szerokość. Opcja wyraźnej wzmianki w innej odpowiedzi będzie również działać, gdy ustawiasz tę wartość szerokości, jednak będziesz musiał zmodyfikować tę wartość, jeśli chcesz, aby maksymalna szerokość zmieniła się na podstawie szerokości nadrzędnej (ponieważ wyraźnie ustawiłeś szerokość).
Moje powyższe rozwiązanie zapewnia, że szerokość jest zawsze zachowywana bez względu na to, jak duży jest widok rodzica.
źródło
Z jakiegoś powodu, nawet jeśli zmienisz docelowy cel wdrażania iOS na 8.0 lub wyższy, pliki Xib nie przyjmą tej zmiany i pozostaną przy poprzednich ustawieniach w Inspektorze plików
Dlatego powinieneś zmienić go ręcznie dla każdego Xib
Po zakończeniu ostrzeżenie zniknie :-)
źródło