Xcode 9 - „Ograniczenia stałej szerokości mogą powodować przycinanie” i inne ostrzeżenia dotyczące lokalizacji

147

Pobrałem nowy Xcode iw Interface Builder mam mnóstwo problemów z ostrzeżeniami, które mówią:

Ograniczenia stałej szerokości mogą powodować przycinanie

To wygląda tak:

wprowadź opis obrazu tutaj

Mam lokalizację na kilka języków i rozumiem ostrzeżenie, że w innym języku rozmiar etykiety może się zmienić, ale moja aplikacja nie ma tego problemu. Wczoraj uruchomiłem go i przetestowałem w Xcode 8, było dobrze. Nie chcę spędzać wielu godzin na dodawaniu bezcelowych nowych ograniczeń.

Jakieś sugerowane rozwiązania?

Dave G.
źródło
Proponuję zajrzeć do autorezyzacji
Dark Innocence,
3
To samo tutaj. Istnieją przyciski o szerokości 50 punktów we wszystkich językach. Po co brudzić tym moją czystą kartę raportu autoukładu?
John Scalo
9
To zdecydowanie ogromny problem i zaskakujące, że nie ma o tym więcej mowy: O
Fattie
2
Otrzymuję ten błąd nawet mając tylko angielską lokalizację.
Shades
6
Dla innych, jeśli nie ma żadnych lokalizacje i po prostu chcą te ostrzeżenia znikają następnie przenieść storyboard z folderu Base.iproj jak wskazano tutaj: stackoverflow.com/a/45040394/1807644
William T.

Odpowiedzi:

179

Otrzymywałem te same ostrzeżenia, nawet bez wielu języków w mojej aplikacji , co doprowadziło mnie do ustalenia, co naprawdę się dzieje. . .

Dzieje się tu kilka różnych rzeczy. Udało mi się wyciszyć ostrzeżenia o stałej szerokości we własnej aplikacji, zmieniając szerokość odstępów między obiektami ze stałej szerokości na większą lub równą lub mniejszą lub równą .

Można to zrobić, wybierając obiekt w konstruktorze interfejsu, przechodząc do inspektora rozmiaru i tam go zmieniając:

wprowadź opis obrazu tutaj


Lub wybierz ograniczenie z konspektu dokumentu, przejdź do inspektora rozmiaru i tam go zmień:

wprowadź opis obrazu tutaj



Jeśli chodzi o ostrzeżenie u góry zrzutu ekranu:

Ustalone wiązania wiodące i końcowe z ograniczeniem środka mogą powodować przycinanie

Oto zrzut ekranu z mojej własnej aplikacji, w którym otrzymałem dokładnie to samo ostrzeżenie:

wprowadź opis obrazu tutaj

Miałem etykietę ze znakiem @ ustawioną na początku i na końcu przycisków, ale także na wyrównaniu środka z etykietą oceny . Po usunięciu ograniczenia wyrównania do środka ostrzeżenie zniknęło, ale zostałem z nieprawidłowo ułożonym zestawem obiektów.

Wtedy zrezygnowałem z przyjęcia widoku stosu . Choć jest to denerwujące w użyciu, gdy wszystkie ograniczenia i ustawienia są prawidłowe, układa się pięknie i bez ostrzeżeń.


Edytować

Jak pisze Repose w komentarzach, czasami wystarczy po prostu dodać> = 0, ponieważ upewniasz się, że dwa elementy się nie nakładają.

Odcienie
źródło
2
> = 0 zapobiega nakładaniu się i naprawiono nakładające się problemy, które miałem wcześniej, konwersja Leading / Trailing na Right / Left naprawiła błąd obcinania. Wyniki mogą się różnić. Przed rozpoczęciem tworzenia oprogramowania należy skonsultować się z lekarzem.
Odpocznij
@Repose Exactly. Pomyśl o tym, co może pójść nie tak i dodaj ograniczenie, aby upewnić się, że tak się nie stanie.
Shades
Rezygnacja z używania widoku stosu w iOS może jest w porządku, ale dla OS X (przepraszam MacOS) nie zawsze jest to dobry wybór. Apple powinno to wiedzieć. Koncepcja UI i UX często ma różne założenia.
Joannes,
2
Zgadzam się z przyjęciem UIStackView. To zdecydowanie było uciążliwe i próbowałem to zrobić z kilkoma ograniczeniami, dodałem kolejny UIStackView i wszystko się układało idealnie.
templeman15
1
Czy jest inna opcja - co zrobić, jeśli chcę, aby moja kontrola miała stałą szerokość?
Kampai
60

Możesz spróbować wyłączyć opcję „Przestrzegaj kierunku językowego” na podstawie ograniczeń, aby wyciszyć ostrzeżenie i sprawdzić, czy to pomaga. Wybierz swoje ograniczenie i otwórz Attributes / Size Inspector. Zobacz załączone zdjęcie.

Jeśli nie planujesz zlokalizować swojej aplikacji na inne języki, to rozwiązanie nie powinno mieć żadnych wad. W przypadku aplikacji zlokalizowanych musisz być bardziej świadomy swoich etykiet i rozmiarów czcionek.

ps To rozwiązanie działa na iOS. W systemie macOS spróbuj> = lub <=, aby wyciszyć ostrzeżenie.

pps Etykiety na poniższym obrazku są znacznie łatwiejsze do utworzenia przy użyciu AutoLayout i właściwości attributeString na pojedynczym UILabel lub UITextView przy użyciu NSMutableAttributedString. Obraz służy wyłącznie do celów demonstracyjnych.

Brak szacunku dla kierunku językowego

Odpoczynek
źródło
1
Naprawiono „Naprawione początkowe i końcowe wiązania z ograniczeniem środkowym mogą powodować przycinanie”. Dzięki!
toddg
4
Jeśli próbowałeś tego i nie przyniosło to żadnego efektu, spróbuj zamknąć Xcode i uruchomić go ponownie. Ta sztuczka zadziałała na mnie.
T'Pol
2
Nie pozwoli mi to odznaczyć.
Scooter
1
Idealny! to zadziałało dla mnie i nie ma potrzeby zmiany moich ograniczeń, dzięki!
rgkobashi
1
> = ograniczenia miały na mnie zły wpływ z powodu różnych złożonych schematów priorytetów. Byłem przygotowany do wstawienia mojej etykiety do widoku, ale potem znalazłem rozwiązanie, które załatwiło sprawę! Dzięki :)
KerCodex,
33

W przypadku zlokalizowanych etykiet i przycisków to ostrzeżenie ma sens i należy zapewnić niezbędne ograniczenia, aby etykiety się nie nakładały. Jeśli nie nakładają się teraz, mogą w przyszłości, więc zapewnienie ograniczeń nie zaszkodzi.

Xcode pomaga automatycznie dodawać te ograniczenia:

W konspekcie dokumentu swojego storyboardu kliknij żółtą strzałkę i wybierz „stały początek” lub „ustalony koniec”, w zależności od tego, gdzie tekst znajduje się na ekranie (po lewej lub po prawej). To rozwiąże większość problemów.

Zrzut ekranu Xcode

Jeśli masz ten problem z przyciskiem bez tekstu (tylko obraz), spróbuj usunąć „domyślny tytuł”, który nadal może być ustawiony dla przycisku:

Zrzut ekranu Xcode

Pascal
źródło
4
W moim przypadku usunięcie domyślnego tytułu spowodowało usunięcie ostrzeżenia. Dzięki!
Reinhard Männer
Zwróć uwagę, że po dodaniu UIButtondo Storyboard, default buttontytuł będzie button.
Miguel Tepale
29

Dzięki Labels, można ustawić Linesto 0i Autoshrinkwłaściwości jest Minimum Font Sizeusunięcie Fixed Width Constraints May Cause Clippingostrzeżenia, jak poniżej:

wprowadź opis obrazu tutaj

Król Lew
źródło
3
Tak, wystarczy ustawić linie na 0.
Reefwing
2
Ustawienie linii na 0 powoduje, że etykieta rozszerza się do tylu wierszy, ile potrzeba, co może nie być tym, czego chcesz.
nickdnk
@nickdnk: wiem, że jeśli ustalisz ograniczenie wysokości etykiety, to się nie rozwinie.
Lionking
20

Kolejne szybkie rozwiązanie!

W przypadku przycisku UIButton, zmiana tytułu ze zwykłego na tekst przypisany również rozwiązała mój problem: -

wprowadź opis obrazu tutaj

tryKuldeepTanwar
źródło
Działał jak urok!
rzemiosło
7

Wiem, że odpowiedź na to pytanie została już udzielona, ​​ale aby naprawić ten błąd w moim przypadku, dodałem właściwość „Współczynnik proporcji”, a następnie wyeliminowałem ograniczenie szerokości lub wysokości, co działało całkiem dobrze i było mniejszym wysiłkiem, a udało mi się zachować ten sam wynik i dostosuj mój widok do różnych urządzeń.

reojased
źródło
4

Swift 4, Xcode 9.1:

Jeśli chodzi o ten problem, myślę, że twój obiekt nie wie, jaka jest prawidłowa pozycja środkowa w kontekście jego superwizji , a używanie usuń, większe niż lub inne ustawienia wyprzedzania / usuwania w większości przypadków nie działa poprawnie. Najpierw musisz sprawdzić poprawne ograniczenia swojego superwizji.

Jeśli twój nadzór / y są poprawnie ustawione, możesz spróbować „wyjaśnić” swojemu obiektowi, jakie jest prawidłowe położenie w widoku, ustawiając ograniczenie „poziomo w kontenerze” :

wprowadź opis obrazu tutaj

Alessandro Ornano
źródło
2

Jeśli potrzebujesz stałego ograniczenia szerokości dla przycisku, po prostu ustaw priorytet ograniczenia szerokości na 700.

ChikabuZ
źródło
1

Miałem ten sam problem, ale kiedy zmieniam na >=to automatycznie ustawiam stałą na 0, jeśli 60np. Wybiorę, ostrzeżenie pojawia się ponownie. Więc byłem w pętli z problemem.

Mogę naprawić osadzanie mojego LabelwView

Editor > Embed In > View

W Labelustawić Top, Bottom, Leadingoraz Trailingzconstant = 0

ograniczenia

W Viewustawiłem to constraints, czego oczekiwałem wcześniej.

Haroldo Gondim
źródło
1

Miałem ten sam problem podczas przechodzenia do Xcode 9 i znalazłem podejście, które jest przydatne w przypadku niektórych rodzajów układów. W moim przypadku chciałem mieć nagłówek tabeli, w którym dwie kolumny (etykiety UIL) miały stałą szerokość, a druga zmienną. Niezależnie od tego, jak określiłem szerokości kolumn (w tym używając ograniczeń większych lub równych zamiast równych itp.), Ciągle otrzymywałem ostrzeżenie o możliwym przycięciu. W moim przypadku chciałem, aby kolumna o zmiennej szerokości (UILabel) została przycięta, jeśli to konieczne. Mogłem po prostu zignorować ostrzeżenie, ale nie lubię tego robić.

Podejście, które tutaj zadziałało, polegało na utworzeniu UIView z odpowiednimi ograniczeniami rozmiaru i osadzeniu UILabel jako widoku podrzędnego w UIView. W razie potrzeby następuje obcięcie i nie otrzymuję żadnego ostrzeżenia. Działa to niezależnie od tego, czy UIView / osadzony UILabel znajduje się w StackView, czy nie.

Jest to zasadniczo to samo podejście, co podejście Haroldo Gondima, ale tutaj widać, że działa również z lub bez StackView.

Poniższy obraz przedstawia podejście z i bez StackView. „SpacerName” to element UIView o zmiennej szerokości, zawierający etykietę, a „SpacerPD” to element o stałej szerokości 80. [Kolory nie są istotne; tylko po to, aby pokazać, gdzie są widoki.]

wprowadź opis obrazu tutaj

Tom Linton
źródło
0

Jak widać na poniższym obrazku, wystąpił błąd „Ograniczenia stałej szerokości mogą powodować przycinanie”, ponieważ mimo że ustawiłem moje pole tekstowe na środku w pionie, a moja etykieta miała ograniczenie lewego marginesu, nie zdefiniowałem ograniczenia dla pola tekstowego w stosunku do etykiety, więc XCode ostrzegał mnie, że pole tekstowe może przyciąć (być renderowane powyżej) etykietę.

wprowadź opis obrazu tutaj

Po dodaniu lewego ograniczenia do pola tekstowego, aby zawsze pozostawać w pewnej odległości od etykiety, błąd został uznany za rozwiązany przez XCode i nie przeszkadzało mi to już ostrzeżeniem o ograniczeniach.

Ulysses Alves
źródło
0

Miałem podobny problem, gdy próbowałem mieć przycisk z takimi samymi obiciami od krawędzi superwidoku.

Przypadek błędu

Skończyło się na użyciu horizontal centerograniczenia i equal widthsograniczenia do super view.

Moje rozwiązanie

Pei
źródło
-1

Aby naprawić błąd : Ograniczenia stałej szerokości mogą powodować przycinanie ”i inną lokalizację. Musisz wybrać widok / obiekt, przejść do„ Show Size Inspector ”, znaleźć ograniczenie szerokości i ustawić stałą na większą lub równą:

Inspektor rozmiaru

Aby naprawić błąd : brak ograniczenia wiodącego / końcowego, co może powodować nakładanie się na inne widoki

Oznacza to, że widok / obiekt, na który skarży się Xcode, nie zawiera wiodącego lub końcowego ograniczenia do sąsiedniego widoku.

Przytrzymując kontrolę, przeciągnij do widoku / obiektu w pobliżu

Contrl + PressClick

Dodaj wiodące lub końcowe ograniczenie

Wiązanie wiodące / kończące

Manny
źródło
Jeśli klikniesz trójkąt ostrzegawczy, Xcode automatycznie utworzy je za pomocą jednego kliknięcia.
lensovet