source

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

factcode 2023. 7. 13. 21:09
반응형

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

저는 새로운 Xcode를 다운로드했고 인터페이스 빌더에서 다음과 같은 경고와 관련하여 많은 문제를 겪고 있습니다.

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

다음과 같이 표시됩니다.

enter image description here

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

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

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

여기에는 몇 가지 다른 일들이 있습니다.저는 객체 간격의 너비를 고정 너비에서 더 크거나 같거나 더 작거나 같음으로 변경하여 제 앱에서 고정 너비 경고를 잠글있었습니다.

이 작업은 인터페이스 작성기에서 개체를 선택하고 크기 검사기로 이동한 후 변경하여 수행할 수 있습니다.

enter image description here


또는 문서 개요에서 구속조건을 선택하고 크기 검사자로 이동한 후 변경합니다.

enter image description here



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

중심 제약 조건으로 선행 및 후행 제약 조건을 고정하면 클리핑이 발생할 수 있음

다음은 제가 정확히 같은 경고를 받고 있던 제 앱의 스크린샷입니다.

enter image description here

저는 @ 기호가 있는 라벨을 버튼 앞과 뒤로 설정하고 중앙을 등급 라벨과 정렬하도록 설정했습니다.중앙 정렬 제약 조건을 제거한 후 경고는 사라졌지만 부적절하게 배치된 일련의 객체는 남겨졌습니다.

그때 저는 스택 뷰를 수용하기로 결심했습니다.모든 제약 조건과 설정을 올바르게 사용하면 경고 없이 아름답게 배치됩니다.


편집

Repose가 댓글에 기록한 것처럼 >= 0을 추가하는 것이 필요할 때가 있습니다. 두 요소가 겹치지 않도록 하기 때문입니다.

제약 조건에 따라 "언어 방향 존중"을 사용 불가능으로 설정하여 경고를 잠재우고 도움이 되는지 확인할 수 있습니다.제약 조건을 선택하고 속성/크기 관리자를 엽니다.첨부된 이미지를 참조하십시오.

앱을 다른 언어로 현지화할 계획이 없다면 이 솔루션에는 단점이 없어야 합니다.현지화된 앱의 경우 레이블과 글꼴 크기를 더 의식해야 합니다.

p.s. 이 솔루션은 iOS에서 작동합니다.macOS의 경우 >= 또는 <=를 사용하여 경고를 잠재웁니다.

p.p.s. 아래 그림의 레이블은 단일 UI 레이블 또는 NSMutableAttributedString을 사용하는 UITextView에서 AutoLayout 및 AttributedString 속성을 사용하여 훨씬 쉽게 만들 수 있습니다.이 이미지는 시연용으로만 사용됩니다.

Disrespect Language Direction

현지화된 레이블과 버튼의 경우 이 경고가 타당하며 레이블이 겹치지 않도록 필요한 제약 조건을 제공해야 합니다.지금 겹치지 않으면 나중에 겹칠 수 있으므로 제약 조건을 제공하는 것이 나쁘지 않을 것입니다.

Xcode를 사용하면 다음과 같은 제약 조건을 자동으로 추가할 수 있습니다.

스토리보드의 문서 개요에서 노란색 화살표를 누른 후 화면의 텍스트 위치(왼쪽 또는 오른쪽)에 따라 "고정 선행" 또는 "고정 후행"을 선택합니다.이것으로 대부분의 문제를 해결할 수 있습니다.

Xcode screenshot

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

Xcode screenshot

와 함께Labels설정할 수 있습니다.Lines이라0그리고.Autoshrink은 속은입니다.Minimum Font Size거할을 Fixed Width Constraints May Cause Clipping다음과 같은 경고:

enter image description here

또 다른 빠른 해결책!

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

enter image description here

이 질문에는 이미 답이 있었지만 이 오류를 해결하기 위해 제가 한 일은 "측면 비율" 속성을 추가한 다음 폭이나 높이 제약을 제거하는 것이었습니다. 이 작업은 상당히 효과적이었고 노력도 덜 했습니다. 그리고 저는 동일한 출력을 유지하고 다양한 장치에 맞게 제 관점을 조정할 수 있었습니다.

Swift 4, Xcode 9.1:

이 문제와 관련하여, 나는 당신의 객체가 그것의 감독 상황에서 정확한 중앙 위치가 무엇인지 모른다고 생각합니다. 그리고 제거를 사용하거나 다른 선행/처리 설정을 사용하는 것은 대부분 올바르게 작동하지 않습니다.먼저, 수퍼뷰의 올바른 제약 조건을 확인해야 합니다.

수퍼뷰가 올바르게 설정된 경우 "컨테이너의 수평" 제약 조건을 설정하여 뷰에서 올바른 위치가 무엇인지 개체에 "설명"할 수 있습니다.

enter image description here

에 고정 너비 를 " " " " " " " " " " " " " " " " " " " " " " " 으로 설정하면 .700.

나도 같은 문제가 있었지만, 내가 바뀌었을 때.>=은 자동으로 를 자으로상수다설음정니합다로으를동설다로 합니다.0가 내가원면다를 60예를 들어 경고가 다시 나타납니다.그래서 저는 그 문제에 빠져 있었습니다.

나는 나의 내장을 고칠 수 있었습니다.Label순식간에View

Editor > Embed In > View

Label나는 설정Top,Bottom,Leading그리고.Trailing와 함께constant = 0

constraints

View설정합니다.constraints내가 전에 기대했던 것.

Xcode 9로 이동할 때 동일한 문제가 발생하여 특정 레이아웃에 유용한 접근 방식을 찾았습니다.저의 경우, 두 개의 열(UI 레이블)이 고정 너비이고 다른 열은 가변 너비인 테이블 헤더를 원했습니다.열 너비를 지정한 방법(동일한 대신 같거나 같은 제약 조건 사용 등)에 관계없이 클리핑 가능성에 대한 경고가 계속 표시되었습니다.저의 경우, 필요한 경우 가변 너비 열(UI 레이블)을 클리핑하기를 원했습니다.경고를 무시할 수도 있었지만, 그렇게 하는 것을 좋아하지 않습니다.

여기서 효과적인 접근 방식은 적절한 크기 제약 조건을 가진 UIView를 만들고 UIBiew에 하위 뷰로 UIBabel을 포함하는 것이었습니다.그러면 필요하면 절단이 발생하고 저는 아무런 경고도 받지 않습니다.이렇게 하면 UIView/내장 UILabel이 StackView에 있는지 여부에 관계없이 작동합니다.

이것은 본질적으로 Haroldo Gondim의 접근 방식과 동일하지만 StackView와 상관없이 작동하는 것을 볼 수 있습니다.

다음 이미지는 StackView가 있는 경우와 없는 경우의 접근 방식을 보여줍니다."SpacerName"은 레이블을 포함하는 가변 너비 UIView이고 "SpacerPD"는 고정 너비가 80인 너비입니다. [색상은 중요하지 않습니다. 보기 위치를 표시하기 위해 여기에 있습니다.]

enter image description here

아래 이미지에서 볼 수 있듯이, 저는 "고정제약이 클리핑을 일으킬 수 있습니다"라는 오류를 가지고 있었습니다. 왜냐하면 제가 제 텍스트 상자를 수직 중심으로 설정하고 레이블은 왼쪽 여백 제약이 있지만, 라벨과 관련하여 텍스트 상자에 대한 제약을 정의하지 않았기 때문입니다.그래서 XCode는 텍스트 상자가 레이블을 클리핑(위에 렌더링)할 수 있다고 경고했습니다.

enter image description here

텍스트 상자에 왼쪽 제약 조건을 추가하여 레이블과 항상 일정한 거리를 유지한 후 오류는 XCode로 해결된 것으로 간주되었으며 제약 조건 경고로 인해 더 이상 신경이 쓰이지 않았습니다.

슈퍼 뷰의 가장자리에서 동일한 패딩이 있는 버튼을 시도할 때도 비슷한 문제가 있었습니다.

Error case

사용하게 되었습니다.horizontal center제약 및equal widths에 대한 제약.super view.

My solution

이러한 경고가 관련이 없는 테스트 앱에서 작업하고 있기 때문에 이러한 경고를 사용하지 않도록 설정하고 싶었습니다. 답변에 설명된 바와 같이 XCode는 스토리보드를 다음에 배치합니다.Base.lproj폴더는 기본적으로 해당 폴더에 있는 경우 스토리보드에서만 경고를 확인합니다.Finder를 사용하여 문제가 되는 스토리보드를 이동하여 경고를 제거할 수 있습니다.Base.lproj기본 프로젝트 폴더에 디렉터리 수준을 하나씩 폴더화한 다음 XCode에서 스토리보드를 제거하고 다시 추가합니다.이를 통해 XCode 12.5.1의 경고가 제거되었습니다.

이 스레드에 대한 댓글에 이 솔루션이 언급되었지만, 이전에 댓글을 간과하여 답변으로 추가합니다.

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

Size Inspector

오류를 수정하려면: 다른 보기와 중복될 수 있는 선행/추적 제약 조건이 누락되었습니다.

이는 Xcode가 불만을 제기하는 뷰/객체가 인접 뷰에 선행 또는 후행 제약 조건이 없음을 의미합니다.

컨트롤을 유지한 상태에서 가까운 뷰/객체로 끕니다.

Contrl + PressClick

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

Leading/Trailing Constraint

언급URL : https://stackoverflow.com/questions/45122691/xcode-9-fixed-width-constraints-may-cause-clipping-and-other-localization-wa

반응형