IT TIP

Xcode가 다시 시작될 때마다 잘못 배치 된 뷰

itqueen 2020. 11. 28. 13:23
반응형

Xcode가 다시 시작될 때마다 잘못 배치 된 뷰


내 앱에서 처음으로 스토리 보드를 사용하고 있습니다.

Xcode를 닫을 때 잘못된 뷰 또는 스토리 보드와 관련된 모든 것에 대한 경고가 없습니다. Xcode를 다시 시작하고 스토리 보드를 열면 15 개 장면 중 3 개가 뷰 경고를 잘못 배치했습니다.

파일을 선택하는 것 외에 아무것도 건드리지 않고 git status.storyboard 파일에 변경 사항이있는 것을 확인할 수 있습니다 . 이면 git diff파일의 여러 영역에 다음이 포함되어 있습니다.

<variation key="widthClass=compact" misplaced="YES">
    <rect key="frame" x="8" y="56" width="130" height="34"/>
</variation>

요소에 이미 노드가 <variation key="widthClass=Compact"있는 경우 misplaced속성과 rect노드가 추가됩니다.

경고를 없애기 위해해야 ​​할 유일한 일은 각각을 클릭하고 "프레임 업데이트"가 선택되어 있는지 확인한 다음 "잘못된 위치 수정"을 클릭하는 것입니다. Xcode를 다시 시작할 때까지 모든 것이 수정됩니다.

내 장면의 기본 구조는 다음과 같습니다.

UIView
    UICollectionView
        UICollectionReusableView
        UICollectionViewCell
        UICollectionViewCell
    UISegmentedControl

다시 시작할 때마다 이런 일이 발생하지 않도록하려면 어떻게해야합니까?


이는 일반적으로 제약 조건을 올바르게 설정하지 않은 경우 발생합니다.

UIViewController 내부의 모든 뷰를 제거하고 제약 조건과 함께 새로 추가해보십시오.

코드를 정리하고 실행하십시오.


뷰가 잘못 배치 된 이유 중 하나는 스토리 보드에서 라이브 뷰 (IBDesignables)를 사용한 경우 IB가 모든 라이브 뷰 빌드를 완료하기 전에 스토리 보드를 열고 다른 파일로 빠르게 이동하면 뷰가 잘못 배치되는 것입니다. IB는 에디터에서 스토리 보드를 보는 즉시 라이브 뷰 구축을 시작합니다. 잘못 배치 된 뷰를 수정하려면 IB가 스토리 보드에 잠시 머물면서 스토리 보드 구축을 완료 할 수 있도록 허용하면 잘못 배치 된 뷰가 수정됩니다.


제 경우에는 사용자 정의 글꼴 및 고유 (명시 적으로 정의되지 않은) 크기가있는 모든 레이블 / 버튼에서 발생합니다. Xcode 버그처럼 보입니다.


나는 이전에 같은 문제에 직면했으며 그것이 우리 잘못이 아니라 Xcode의 버그라고 생각합니다.

귀하의 경우 .storyboard파일이 변경하지만 당신은 아무것도 만지지 않았다, 단지 파일을 선택하고 엑스 코드 메뉴를 선택 Source Control> - Discard Changes in "xxxx.storyboard"...,이 작업을해야합니다 :)


이 문제는 런타임에 실제 화면 크기에 맞지 않는 제약 조건을 추가 할 때 발생합니다. 예를 들어, 너비가 화면 너비를 초과하는 UIButton (예 : 너비 600)이 있고 해당 UIButton에 고정 너비 제약 조건을 추가하지만 선행 또는 후행 제약 조건이없는 경우 충돌이 없으므로 Xcode는 경고를 표시하지 않지만 화면 너비가 600 미만인 장치 또는 시뮬레이터에서 실제로 앱을 실행하면 Xcode가 화면 너비가 600 미만인 화면 너비에 맞게 UIButton 너비를 자동으로 조정하여 레이아웃 제약 조건이 런타임시 화면에 맞는 것으로 변경됩니다.


크기 클래스를 사용하는 경우 제약 조건이 표시에 미치지 못합니다 (Any-Any 인 경우 모든 장치 유형에 따름). 그렇지 않은 경우 프레임 또는 제약 조건을 조정하고 다시 확인하십시오.

자동 레이아웃으로 인해이 문제가 발생할 수도 있습니다. 경고를 클릭하면 경고에 대한 모든 정보를 얻을 수 있습니다.


이전 앱에서 동일한 문제에 직면했습니다. 내가 알아 차린 것은 여기서 스토리 보드의 크기가 중요하다는 것입니다.

이것은 Xcode 문제입니다.

너비에 관계없이 모든 높이의 스토리 보드를 사용하면 이 문제가 발생하지 않습니다. Compact width regular height 크기의 스토리 보드를 사용하는 경우이 문제가 발생합니다.

따라서 Xcode에서 기본 스토리 보드 크기 를 사용하십시오.


스토리 보드 하단에는 크기 등급을 선택할 수있는 옵션이 있습니다. 옵션을 wRegular hRegular에서 다른 옵션으로 변경하면 비슷한 문제가 발생합니다. 그 이유를 모르겠습니다.

프로젝트를 닫기 전에 선택한 것과 동일한 크기의 클래스를 선택한 후 프로젝트를 열어 문제를 해결하십시오.

예를 들어, iPhone 용 wCompact hRegular로 크기 클래스를 선택하고 프로젝트를 닫은 경우입니다. 프로젝트를 다시 열면 크기 클래스가 wRegular hRegular로 변경된 것을 볼 수 있습니다. 이 때문에보기 개체가 변경됩니다. wCompact hRegular를 다시 선택하여 문제를 해결하십시오.

도움이되기를 바랍니다.


간단한 수정은 Xcode가 제약 조건을 선택하도록 허용 한 다음 돌아가서 그것이 당신을 위해 작동하는지 확인하기 위해 선택한 것을 확인하는 것입니다.

스토리 보드에서 :

  • 문제를 제공하는 View Controller를 선택하십시오.
  • 자동 레이아웃 문제 해결 (오른쪽 하단)
  • 선택한보기 : 제안 된 제약으로 재설정

재설정 된 제약 조건을 확인하려면 :

  • 컨트롤러 내에서 각보기 선택
  • 제약 검사기 (오른쪽 상단)
  • scroll down and examine constraints

  1. click to preview a regular file (not .xib or .storyboard file)
  2. quit Xcode
  3. run git checkout .
  4. restart Xcode

the .storyboard file is not modified now.


First check you have implement all constraints.If all constraint are correct then delete related constraint and rebut again.

참고URL : https://stackoverflow.com/questions/29289892/misplaced-views-each-time-xcode-restarts

반응형