IT Share you

8.0 이전 iOS 버전의 레이아웃 여백과 관련된 레이아웃 속성

shareyou 2020. 11. 12. 20:36
반응형

8.0 이전 iOS 버전의 레이아웃 여백과 관련된 레이아웃 속성


다음 경고 (및 iOS 7의 후속 정렬 문제)의 원인은 무엇입니까?

사용할 수없는 속성 : 8.0 이전 iOS 버전의 레이아웃 여백과 관련된 레이아웃 속성


게시 된 답변 중 어느 것도 문제를 해결하지 못했습니다. 그러나 그 이유는 다음과 같습니다. Xcode 6은 기본적으로 상대 여백을 기반으로 제약 조건을 만듭니다. iOS 8.0 이상에서만 사용할 수 있습니다. 배포 대상이 iOS 7.0 이하로 설정된 경우 이러한 경고가 표시됩니다.

경고를 수정 한 방법 :

  • Xcode에서 경고를 클릭하십시오.
  • 속성 관리자가 제약 조건을 엽니 다.
  • 여백이있는 항목 검색 (스크린 샷 참조)
  • 여백 기준 옵션 끄기

속성 검사자


"상대 여백 선호"비활성화

여기에 이미지 설명 입력


"상대적인 여백 선호"확인란을 선택 취소하면이 경고가 표시되는 상황에 빠지지 않습니다.

나처럼 문제를 깨닫기 전에 제약 조건이있는 전체 앱을 구축했다면 Xcode가 어떤 제약 조건이 문제인지 쉽게 알려주지 않기 때문에 상황이 조금 더 어려워집니다.

모든 제약 조건을 다시 작성하지 않으려면 실제 .storyboard 파일을보고 다음과 같은 제약 조건을 찾았습니다.

<constraint firstItem="vId-..." firstAttribute="top" secondItem="In7-..." secondAttribute="topMargin" id="C0H-..."/>

"topMargin"에 주목하십시오. "Margin"으로 끝나는 속성으로 인해 경고가 발생합니다. 이러한 방식으로 파일의 제약 조건을 확인한 다음 제거하고 IB에서 다시 생성했습니다. 그 후이 경고는 사라졌습니다.

모든 Xcode 경고를 처리 한 후에도 여전히 일부 동작 차이가 발생하지만 iOS 7과 iOS 8 제약 조건 처리 간의 일부 불일치를 해결해야한다고 생각합니다.


저는 현재 iOS7 및 8을 대상으로하는 Xcode 6에서 앱을 만드는 것과 같은 상황에 있습니다.이 경고는 여백과 관련된 제약 조건을 iOS7에서 사용할 수 없기 때문에 표시되지만 기본적으로 Xcode 6에서 생성됩니다. .

이 질문에 대한 다른 답변에서 제안한대로 '여백 기준'기능을 사용하지 않도록 절대적으로 돌아가서 제약 조건을 편집 할 수 있습니다.

새로운 제약을 생성 할 때 생성 할 제약의 종류를 선택할 때 Option 키를 누르고 있습니다. 이렇게하면 마진을 기반으로하지 않는 제약 조건을 즉시 만들 수 있으므로 나중에 돌아가서 수정할 필요가 없습니다.


Xcode 6은 기본적으로 상대 여백을 기반으로 제약 조건을 만듭니다.

따라서 모든 기준선 속성을 강제로 제거하고 Interface Buidler에서 모든 잘못된 제약 조건을 검색하고 싶지 않은 경우 iOS 7 을 지원하기 위해이 방법을 권장 할 수 있습니다.

제약 조건에서 "Baseline"이있는 모든 더미 문자열을 찾아 제거하려면 다음을 수행하십시오.

  1. Xcode 닫기
  2. regexp를 지원하는 선호하는 텍스트 편집기에서 stroyboard 파일을여십시오.
  3. 스토리 보드 파일에서 패턴별로 모든 문자열을 찾아 제거합니다. .*"baseline".*\n
  4. 이제 파일을 저장하고 Xcode에서 엽니 다.
  5. 표시된 모든 정렬 불량 수정 : 모든 경고를 찾고 "모든 뷰에 대한 제약 업데이트"를 눌러 모든 뷰의 원래 위치를 저장합니다.
  6. 이익!

UPD : "기준"제약 조건도 충돌을 유발하지만 Xcode는 이러한 제약 조건에 대한 경고를 표시하지 않습니다!

이를 수정하려면-스토리 보드 파일에서 패턴별로 모든 문자열을 제거하십시오. .*"baseline".*\n


나는 프로그래머가 아닌 접근 방식을 취했습니다.

어떤 뷰 컨트롤러가 8.0 여백 메시지를 유발하는지 알고있었습니다. 그래서 저는 제약 목록으로갔습니다. 나는 33을 가지고 있었다. 나는 8.0 여백 메시지를 일으키는 모든 것을 제거했다. 나는 20 명으로 내려 갔다 (11 명이 문제였다).

33 개 중 32 개 삭제를 선택하고 결과를 확인합니다. 31 개 이상 33 개 삭제 등 선택 ... 당연히 메시지가 여전히있을 때 ... 문제가있는 메시지를 삭제합니다.

그래서 오류 메시지를 해결하는 5 분이 걸렸습니다 .

다른 제약 메시지가 나타 났지만 큰 문제는 아닙니다.

Ok than, redo and resolve step by step the constraint messages but this time check that all the constraint you add don't provoke the reappearing of the 8.0 margin message. If so, undo and take an other strategy when adding constraints. There's always an other way to add a constraint that work.

That's not what is proposed by Xcode but it will do the job.

At the end, your done.

If you have more than one view controller, and don't know witch one is causing the 8.0 margin message, try to isolate each view controller. May be in a separate test project with a copy and paste or deleting all the other view except one and se the result.

Using the "Create Snapshot" in the file menu can help you if something goes wrong.


Suppressing the warnings: I went through all IB constraints and deleted all that said "First Baseline...". This made all of these warnings go away. However, IB will reintroduce the warnings if you "Add missing constraints" or "reset to suggested constraints".

Possible cause: From a fresh Xcode 6.1 project, I copy/pasted ViewControllers in Storyboard (lazily), using "reset to suggested constraints". Then changed the project target from 8.0 to 7.1. This caused the warnings to pop up. I noticed that the warnings only occurred on certain of my ViewControllers, which I believe were the ones I copied/pasted in Storyboard.

제안 : 7.1을 타겟팅하는 경우 IB를 사용하기 전에 먼저 설정하세요. 스토리 보드에서 뷰 컨트롤러를 복사 / 붙여 넣기하지 마십시오. 그리고 IB 내에서 작업 할 때 "새로운 경고"에주의하십시오.이 성가심의 원인을 확인할 수 있기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/25261326/layout-attributes-relative-to-the-layout-margin-on-ios-versions-prior-to-8-0

반응형