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?


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ą.


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


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


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


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


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ń.


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


2

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


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.


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


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.


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


-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


Jeśli klikniesz trójkąt ostrzegawczy, Xcode automatycznie utworzy je za pomocą jednego kliknięcia.
— lensovet
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.