Xcode 9- "고정 너비 제한으로 인해 클리핑이 발생할 수 있음"및 기타 현지화 경고


147

새 Xcode를 다운로드했고 Interface Builder에서 다음과 같은 경고와 관련된 많은 문제가 있습니다.

고정 폭 제약으로 인해 클리핑이 발생할 수 있음

다음과 같이 보입니다 :

여기에 이미지 설명을 입력하십시오

여러 언어로 현지화되어 있고 다른 언어에서는 레이블 크기가 변경 될 수 있다는 경고를 이해하지만 내 앱에는이 문제가 없습니다. 어제 Xcode 8에서 실행하고 테스트했지만 괜찮 았습니다. 무의미한 새로운 제약 조건을 추가하는 데 몇 시간과 몇 시간을 보내고 싶지 않습니다.

제안 된 해결책이 있습니까?


자동 크기 조정을 살펴 보는 것이 좋습니다
Dark

3
여기도 마찬가지입니다. 모든 언어에서 너비가 50pt로 보장되는 버튼이 있습니다. 왜 이렇게 깔끔한 자동 레이아웃 보고서 카드를 설득해야합니까?
John Scalo

9
이것은 분명히 큰 문제이며 그것에 대해 더 이상 이야기하지 않는 것이 놀랍습니다 : O
Fattie

2
영어 지역화 만 있어도이 오류가 발생합니다.
Shades

6
현지화가없고이 경고가 사라지기를 원하는 경우 여기에 표시된대로 스토리 보드를 Base.iproj 폴더 밖으로 옮기십시오. stackoverflow.com/a/45040394/1807644
William T.

답변:


179

내 앱에 여러 언어가 없어도 동일한 경고 가 표시되어 실제로 무슨 일이 일어나고 있는지 알 수있었습니다. . .

여기에는 몇 가지 다른 일이 있습니다. 객체 간격의 너비를 고정 너비에서 크거나 같 거나 작게 변경하여 내 앱에서 고정 너비 경고 수있었습니다 .

인터페이스 빌더에서 객체를 선택하고 크기 관리자로 이동하여 객체를 변경하면됩니다.

여기에 이미지 설명을 입력하십시오


또는 문서 개요에서 제약 조건을 선택하고 크기 관리자로 이동하여 여기에서 변경하십시오.

여기에 이미지 설명을 입력하십시오



스크린 샷 상단에있는 경고 :

중심 구속 조건이있는 고정 선행 및 후행 구속 조건이 클리핑을 유발할 수 있음

다음은 정확히 동일한 경고가 표시되는 내 앱의 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오

나는 @ 기호가 붙은 레이블 이 버튼을 앞뒤로 설정하고 가운데에 등급 레이블을 맞추도록했습니다 . 나는 일단 중앙 정렬 제약 조건을 제거 , 경고는 사라,하지만이 객체의 잘못 배치 세트 남겨졌다.

그런 다음 스택 뷰받아들이겠다고 사임했습니다 . 사용하는 것만 큼 성가 시게, 모든 제약 조건과 설정을 올바르게하면 경고없이 아름답게 배치됩니다.


편집하다

으로 휴식이 의견의 글을, 때로는 단순히 확실 두 가지 요소가 겹치지 않도록하고있다, 당신이 필요로 할 것이다> = 0를 추가.


2
> = 0은 이전에했던 겹침 및 겹치는 문제를 해결하여 Leading / Trailing을 Right / Left로 변환하면 클리핑 오류가 수정되었습니다. 결과는 다를 수 있습니다. 소프트웨어 개발을 시작하기 전에 의사와 상담하십시오.
휴식

@ 정확히 폐기하십시오. 무엇이 잘못 될지 생각하고 제약이 없는지 확인하십시오.
Shades

iOS에서 Stack View를 사용하도록 사임해도 괜찮지 만 OS X (미안한 MacOS)의 경우 항상 좋은 선택은 아닙니다. 애플은 그것을 알아야한다. UI와 UX의 개념은 종종 다른 가정을합니다.
Joannes

2
UIStackView를 수용하는 데 동의합니다. 확실히 고통스럽고 몇 가지 제약 조건으로 시도했지만 다른 UIStackView를 추가하고 완벽하게 배치했습니다.
templeman15

1
다른 옵션이 있습니까?-너비를 고정 너비로 ​​제어하려면 어떻게해야합니까?
Kampai

60

제한 조건에 따라 "언어 방향 존중"을 비활성화하여 경고를 끄고 도움이되는지 확인할 수 있습니다. 구속 조건을 선택하고 속성 / 크기 검사기를 엽니 다. 첨부 된 이미지를 참조하십시오.

앱을 다른 언어로 지역화하지 않으려는 경우이 솔루션에 폴 백이 없어야합니다. 현지화 된 앱의 경우 레이블 및 글꼴 크기를 더 잘 인식해야합니다.

ps이 솔루션은 iOS에서 작동합니다. macOS의 경우 경고를 끄려면> = 또는 <=를 시도하십시오.

아래 그림의 pps 레이블은 NSMutableAttributedString을 사용하여 단일 UILabel 또는 UITextView에서 AutoLayout 및 ValueedString 속성을 사용하여 훨씬 쉽게 만들 수 있습니다. 이미지는 데모 용입니다.

무례한 언어 방향


1
"중심 구속 조건이있는 고정 선행 및 후행 구속 조건이 클리핑을 유발할 수 있음"문제를 수정했습니다. 감사!
toddg

4
시도했지만 아무런 효과가없는 것 같으면 Xcode를 종료하고 다시 시작하십시오. 그 트릭은 나를 위해 일했습니다.
T'Pol

2
이 선택을 취소 할 수 없습니다.
스쿠터

1
완전한! 이것은 나를 위해 일했으며 내 제약 조건을 변경할 필요가 없습니다. 감사합니다!
rgkobashi

1
> = 제약 조건은 다양한 복잡한 우선 순위 체계로 인해 나에게 좋지 않은 영향을 미쳤습니다. 레이블을 뷰에 삽입 할 준비가되었지만 트릭을 수행 한 솔루션을 찾았습니다! 감사합니다 :)
KerCodex

33

현지화 된 레이블 및 버튼의 경우이 경고는 의미가 있으며 레이블이 겹치지 않도록 필요한 제약 조건을 제공해야합니다. 그들이 지금 겹치지 않는다면 미래에 있을지도 모르므로 제약을 제공하는 것이 아프지 않을 것입니다.

Xcode를 사용하면 이러한 제약 조건을 자동으로 추가 할 수 있습니다.

스토리 보드의 문서 개요에서 노란색 화살표를 클릭하고 화면의 텍스트 위치 (왼쪽 또는 오른쪽)에 따라 "고정 고정"또는 "고정 고정"을 선택하십시오. 대부분의 문제를 해결합니다.

Xcode 스크린 샷

텍스트가없는 단추 (이미지 만) 에이 문제가있는 경우 단추에 대해 여전히 설정 될 수있는 "기본 제목"을 제거하십시오.

Xcode 스크린 샷


4
필자의 경우 기본 제목을 제거하면 경고가 제거되었습니다. 감사!
Reinhard Männer

당신이 추가 할 때 사실을 양지 UIButtonStoryboarddefault button제목이됩니다 button.
미겔 테팔 레

29

을 사용하면 is 및 속성을 Labels설정 하여 다음과 같이 경고 를 제거 할 수 있습니다 .Lines0AutoshrinkMinimum Font SizeFixed Width Constraints May Cause Clipping

여기에 이미지 설명을 입력하십시오


3
네, 당신은 라인을 0으로 설정하면됩니다.
Reefwing

2
행을 0으로 설정하면 레이블이 필요한만큼 많은 행으로 확장되어 원하는 형식이 아닐 수 있습니다.
nickdnk

@ nickdnk : 레이블의 높이 제한을 고정하면 확장되지 않습니다.
Lionking

20

또 다른 빠른 해결책!

제목을 일반 텍스트에서 속성 텍스트로 변경하여 UIButton의 경우 내 문제가 해결되었습니다.

여기에 이미지 설명을 입력하십시오


매력처럼 일했다!
craft

7

이 질문에 이미 답변했지만 내 경우 에이 오류를 해결하기 위해 수행 한 것은 "종횡비"속성을 추가 한 다음 너비 또는 높이 제약 조건을 제거하고 이것이 잘 작동하고 노력이 덜한 것이 었습니다. 동일한 출력과 다른 장치에 대한 내 견해를 조정하십시오.


4

스위프트 4, Xcode 9.1 :

이 문제에 대해서는, 개체가 생각하는 그것의 슈퍼 뷰의 맥락에서 정확한 중심 위치의 모르는 및 사용하여 제거, 이상 대부분의 시간의 제대로 작동하지 않습니다 또는 다른 선두 / 설정을 trealing합니다. 먼저 수퍼 뷰의 올바른 제약 조건을 확인해야합니다.

Superview / s가 올바르게 설정되어 있으면 "Horizontally in Container" 제약 조건 을 설정하여 뷰에서 올바른 위치를 "설명"하려고 할 수 있습니다 .

여기에 이미지 설명을 입력하십시오


2

버튼에 고정 너비 제한이 필요한 경우 너비 제한 우선 순위를로 설정하십시오 700.


1

같은 문제가 있었지만 변경 >=하면 자동으로 상수가로 설정 됩니다. 예를 들어 0선택 60하면 경고가 다시 나타납니다. 그래서 나는 문제와 함께 루프에있었습니다.

에 삽입하는 것을 고칠 수 있습니다 Label.View

Editor > Embed In > View

에서 LabelI 세트 Top, Bottom, LeadingTrailingconstant = 0

제약

에서 View내가 설정 constraints내가 전에 기대되었다.


1

Xcode 9로 옮길 때도 같은 문제가 있었고 특정 종류의 레이아웃에 유용한 접근법을 찾았습니다. 필자의 경우 두 열 (UILabels)이 고정 너비이고 다른 열이 가변 너비 인 테이블 헤더를 원했습니다. 열 너비를 어떻게 지정했는지에 관계없이 (등이 아닌 크거나 같은 제약 조건 사용 등 포함) 가능한 클리핑에 대한 경고가 계속 나타납니다. 필자의 경우 가변 너비 열 (UILabel)이 필요한 경우 클립하기를 원했습니다. 나는 경고를 무시했을 수도 있지만 그렇게하는 것을 좋아하지 않습니다.

이 방법은 적절한 크기 제약 조건으로 UIView를 만들고 UILabel을 하위보기로 UILabel을 포함시키는 것이 었습니다. 그런 다음 필요한 경우 잘림이 발생하고 경고가 표시되지 않습니다. UIView / 임베디드 UILabel이 StackView에 있는지 여부에 관계없이 작동합니다.

이것은 본질적으로 Haroldo Gondim의 접근 방식과 동일하지만 StackView의 유무에 관계없이 작동합니다.

다음 이미지는 StackView를 사용하거나 사용하지 않는 방법을 보여줍니다. "SpacerName"은 레이블을 포함하는 가변 너비 UIView이고 "SpacerPD"는 고정 너비 80입니다. [색상은 중요하지 않습니다. 보기가 어디에 있는지 보여주기 위해

여기에 이미지 설명을 입력하십시오


0

아래 이미지에서 볼 수 있듯이 텍스트 상자를 세로 가운데로 설정하고 레이블에 왼쪽 여백 제약 조건을 설정했지만 제약 조건을 정의하지 않았기 때문에 "고정 너비 제약 조건으로 인해 클리핑 이 발생할 수 있습니다 " 라는 오류가 발생 했습니다. 레이블과 관련하여 텍스트 상자의 경우 XCode는 텍스트 상자가 레이블을 클리핑 할 수 있음을 경고했습니다.

여기에 이미지 설명을 입력하십시오

텍스트 상자에 왼쪽 제약 조건을 추가하여 레이블과 항상 일정 거리를 유지하면 오류가 XCode에 의해 해결 된 것으로 간주되어 더 이상 제약 조건 경고로 귀찮게하지 않았습니다.


0

슈퍼 뷰의 가장자리에서 같은 패딩이있는 버튼을 사용하려고 할 때 비슷한 문제가 발생했습니다.

오류 사례

horizontal center제약 조건과 equal widths제약 조건을 사용했습니다 super view.

내 솔루션


-1

오류를 수정하려면 : 고정 너비 제약 조건으로 인해 클리핑이 발생할 수 있음 "및 기타 지역화보기 / 객체를 선택하고"크기 관리자 표시 "로 이동 한 후 너비 제약 조건을 찾아 상수를 더 크게 또는 같게 설정해야합니다.

크기 검사기

오류 수정 : 선행 / 트레일 링 구속 조건이 누락되어 다른 뷰와 겹칠 수 있습니다.

이는 Xcode가 불평하는 뷰 / 객체가 인접 뷰에 대한 선행 또는 후행 제한 조건이 누락되었음을 의미합니다.

컨트롤을 누른 상태에서 뷰 / 오브젝트 옆으로 드래그

Contrl + PressClick

선행 또는 후행 제한 조건 추가

선행 / 후행 제한


경고 삼각형을 클릭하면 Xcode가 한 번의 클릭으로 자동으로 생성합니다.
lensovet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.