Xcode 8로 업데이트 한 후 레이아웃 문제


102

다음은 Xcode 8로 업그레이드 한 후 내 화면 중 하나의 전후입니다. 내가
한 것은 메인 스토리 보드를 여는 것 뿐입니다. 거기서부터 내 휴대 전화에서 내 앱을 빌드하고 실행했습니다.
버전 관리에서 Xcode가 main.storyboard를 여는 것만으로도 많은 변경 사항을 수행하고 있음을 알 수 있습니다.
이러한 변경 사항을 삭제할 때마다 Xcode 7.3.1에서 사용하는 내용을 볼 수 있습니다.
하지만 스토리 보드로 인터페이스 빌더를 다시 열 자마자 이러한 변경 사항이 제자리로 돌아 오는 것을 볼 수 있습니다.

여기서 할 수있는 일이 있습니까?

Xcode 8 이전

여기에 이미지 설명 입력

Xcode 8로 업데이트 한 후

여기에 이미지 설명 입력


새로운 소스로 XCode 8을 다시 열어보십시오 (이전에 변경 한 사항을 숨기십시오). 이제 스토리 보드를 열 때 모든 UI 항목을 강조 표시하고 "프레임 업데이트"를 클릭합니다. 문제를 해결할 수 있습니다.
— d1str0

6
bugreport.apple.com에 버그를 신고하고 문제가 발생한 스토리 보드를 첨부 해 주시겠습니까? 우리는 이것을 더 분석하고 싶습니다.
— 퀸 테일러

1
나는 똑같은 문제가 있습니다. Xcode8에서 스토리 보드를 열고 "초기 장치보기 선택"대화 상자를 수락 한 후 모든 것이 이상하게 작동합니다. 모든 프레임을 업데이트하면 IB가 좋아 보이지만 빌드 후 앱이 완전히 손상됩니다. 4 개의 앱으로 테스트했습니다.
— Cherrypig

@QuinnTaylor 비슷한 문제가 있습니다 .Xcode 8이 스토리 보드를 변환 한 후 UITableViews의 UIImageViews는 Debug View Hierarchy. UICollectionViews에있는 동일한 클래스의 다른 개체는 영향을받지 않습니다.
— Manuel

XIB 또는 Storyboard는 기본값을 이전 버전 7.x로 설정하고 저장 후 닫기를 클릭합니다. 임시 해결책이지만 작동합니다. 저장 후 닫기를 완료 한 후에는 다시 열지 마십시오. 그렇지 않으면 처음부터 동일한 단계를 따라야합니다.
— Bhavesh Kumbhani

답변:


111

스토리 보드 파일을 Xcode8과 호환되도록 변환하면 tableview 이미지가 나타나지 않는 것과 비슷한 문제가 발생했습니다. 이것은 Xcode8의 버그처럼 보이므로 버그 수정이 릴리스 될 때까지 해결 방법은 다음과 같습니다.

  1. Xcode 8에서 스토리 보드를 열고 초기 장치보기를 선택합니다. 평소처럼 변경하십시오.
  2. 변경을 완료 한 후 스토리 보드-> File Inspector-> Opens in-> 'Xcode 7.x'를 선택합니다.

여기에 이미지 설명 입력

  1. 메시지가 나타나면 '저장 후 닫기'를 선택하십시오.
  2. 스토리 보드 변경 사항이 저장되고 스토리 보드가 Xcode8 이전과 마찬가지로 작동합니다.

스토리 보드 파일을 변경해야하는 경우 다음 단계를 다시 수행하십시오.


확실히 이것에 대한 와우 +1. TodayExtension의 iOS 10에서이 문제로 어려움을 겪었습니다. Xcode 8에서 스토리 보드 xml 편집이 의심되는 것을 본 것은 git diff를 분석하여 범위를 좁히기 전까지는 아니 었습니다. Xcode 7 용 스토리 보드 문서를 저장 한 후 (편집 한 후) 이제 다음을 사용하여 빌드하고 배송 할 수 있습니다. iOS 10 용 Xcode 8. 감사합니다.
— John Erck

확실히 버그로 보입니다. Xcode 7.x에서 Opens로 저장은 임시 해결 방법으로 저에게 효과적이었습니다.
— Steve A

이 게시물을 찾을 때까지 Xcode8의 모든 깨진 레이아웃을 수정하는 데 지난 3 일을 보냈습니다. 나는 당신 같은 사람들을 애플보다 더 믿어야 할 것 같다. 이것이 내 시간을 너무 많이 낭비한다는 것을 믿을 수 없습니다. 이것에 대해 David에게 대단히 감사합니다!
— Xu Yin

@XuYin 모든 스토리 보드에 대해이 작업을 수행해야합니까? 내 프로젝트에 다른 스토리 보드가 있으면 어떻게 되나요? Xib 파일은 어떻습니까? 이것도해야하나요?
— Honey

@Honey 나는 스토리 보드에서 그렇게하지 않았지만 문제가있는 모든 xib 파일에서 수행했습니다. 하지만 이상한 레이아웃 문제가 보이면 스토리 보드에서도 시도해보고 싶을 것 같습니다. 수정하는 데 5 초 밖에 걸리지 않기 때문입니다. 앱을 다시 빌드하면 수정 사항을 매우 빠르게 확인할 수 있습니다.
— Xu Yin

14

XIB 또는 Storyboard는 기본값을 이전 버전 7.x로 설정하고 저장 후 닫기를 클릭합니다. 임시 해결책이지만 작동합니다. 저장 후 닫기를 완료 한 후에는 다시 열지 마십시오. 그렇지 않으면 처음부터 동일한 단계를 따라야합니다.여기에 이미지 설명 입력


6
파일 작업이 필요하기 때문에 도움이되지 않습니다. 이 모든 작업은 이전 버전과의 호환성을 위해 파일을 저장하는 것입니다. xib가 Xcode 8에서 편집되는 것을 허용하지 않습니다.
— jowie

나는 이것을하고 있지만 드롭 다운에서 xib 파일을 선택하면 다시 xcode 8.0 만 표시됩니다.
— jayant rawat

8

Eh 같은 문제. 부분적으로 다음과 같은 방법으로 수정했습니다 ( Xcode 버전 8.1 (8B62)의 경우) )

스토리 보드의 문서 개요에서 레이아웃 문제를 나타내는 노란색 화살표가있는 각 장면을 클릭했습니다 (스크린 샷의 1 번).

그 후, 문제가있는 각 장면에 대해 "프레임 업데이트"작은 아이콘 (스크린 샷의 2 번)을 클릭해야했고 장면 당 모든 레이아웃 문제를 해결했습니다.

여기에 이미지 설명 입력

그러나 내 경우 한 장면은 Xcode7에서 Xcode8로 전환 한 후에도 여전히 울고있었습니다. 제약 조건을 조정하거나 누락 된 제약 조건을 추가하여 수동으로 수정해야했습니다.

휴, XCode8과 스토리 보드의 놀라운 놀라움은 아닙니다. AppCode 편집기를 사용했다면 Storyboards; P를 지원하지 않기 때문에 그런 문제는 없을 것입니다.

행운을 빕니다!



6

가능한 해결책에 대한 스레드를 따르십시오 (많은 개발자에게 발생한다고 생각합니다).
Xcode 8 GM 시드 스토리 보드 문제
Xcode 8-이전 스토리 보드가 왜곡됨

(모든 너비 600 사용) Xcode가 Xcode 8로 업데이트되면 모든 ViewController 크기가 변경되었습니다. 결과적으로 모든 레이아웃이 왜곡되었습니다.
현재 문제에 대한 해결책은 3 개뿐입니다 (곧 수정을 기다리지 않을 것입니다).

1. 각 Viewcontroller로 이동하여 Update Frames.

2. Size Inspector -> Freeform -> 600대부분의 컨트롤러가 추론되므로 메인 ViewController 로 이동하면 모든 컨트롤러의 크기가 변경됩니다 (애플에서 소개하고 싶은 새로운 기능의 영향에주의하세요).

3. 스토리 보드 용 git의 변경 사항을 무시합니다 (애플이 Xcode에 중요 할 수있는 일부 업데이트도 삽입했기 때문에 권장하지 않습니다).

Xcode 8 (WWDC16)의 새로운 AutoLayout 기능에 대한 추가 링크 : 앱 적응 형 만들기, 1 부


1
옵션 1이 가장 현명하고 저에게 효과적이었습니다. Mike.R이 언급했듯이 트랙에서 더 많은 문제가 불가피하므로 XCode를 속여 문제를 해결하도록주의하십시오.
— arcady 밥

옵션 1도 사용했습니다 (더 안전하다고 생각합니다). 그러나 시간이 많이 걸립니다.
— Mike.R

5

제 경우에는 Akhil Kateja가 제안한 솔루션을 작동하며 메인 뷰의 너비와 높이도 재설정해야합니다.

1)보기 크기를 자유 형식으로 설정

여기에 이미지 설명 입력

2)보기의 너비와 높이를 원래 크기로 재설정 :

여기에 이미지 설명 입력

마지막으로 저장하면 완료됩니다.


4

나에게 해결책은 단순히 문제가있는 UIViewController를 클릭 한 다음 Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

새로 선택한 기본보기 (제 경우에는 iPhone 7)를 기반으로 기존 제약 조건에 맞게보기를 다시 정렬했습니다.

또한 참고 : 내가했던 것처럼 내비게이션 바가 잘못 배치 된 뷰 경고를 받으면 UINavigationController / UIViewController를 선택한 다음 Attributes Inspector > Bar Visibility > Shows Navigation Bar-껐다가 다시 켭니다.


3

으로 설정하면보기 크기 자유형 에서 유추은 날 위해 일했습니다. 그것은 제목에서 찾을 수 있습니다 시뮬레이션 통계 의 속성 검사기 .


3

나는 같은 문제가 있었고 컨트롤러의 뷰 제약을 강제로 업데이트하여 해결했습니다. viewDidLoad () 함수 에 다음 코드를 넣으십시오.

self.view.layoutIfNeeded()

1
건배 빌! 그 'layoutIfNeeded'가 나를 위해 일했습니다! (시간 동안 다른 모든 시도 후 ..)
— 에단 Halprin


3

@ david-truong ( https://stackoverflow.com/a/39589860/1407528 ) 의 답변 이 제 경우에는 작동하지 않으므로 같은 상황에 있다면 다음을 시도하십시오.

모든 기기를 iOS 10 이상으로 업데이트 한 경우이 버전의 Xcode는 해당 기기를 호환 기기로 인식하지 않습니다. 따라서 다음 트릭을 시도하십시오.

  • 이동 : /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • iOS 10 또는 10.1과 관련된 폴더를 / Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport에 복사합니다.
  • Xcode 7.3.1로 프로젝트 열기 (Xcode가 이미 열려있는 경우 다시 시작)
  • 연결된 iOS 10 이상 기기 선택
  • 푸시 실행

참고 : Swift와 같은 새로운 기능은이 트릭을 사용하여 사용할 수 없지만 프로젝트를로드하고 빌드 할 수 있어야합니다.


3

이것이 도움이되기를 바랍니다.

Xcode를 7.3에서 Xcode 8로 업데이트하고 앱을 실행하면 일부 뷰는 완벽하게 표시되지만 일부는 왜곡되어 있습니다. 그런 다음 nib 파일을 확인한 후 특정 장치 크기를 선택하고 이에 따라 펜촉을 표시하라는 메시지가 표시됩니다. 오프 코스가 아닌 장치 크기 Any-Any(Xcode 7.3) . 따라서 모든 펜촉 파일이 올바른 방식으로 표시되지 않습니다.

솔루션 작업이 나에게 :-아래 이미지와 같이 노란색 화살표를 누르십시오.

여기에 이미지 설명 입력

다음과 같은 옵션을 보여주는 팝업이 표시됩니다.

여기에 이미지 설명 입력

선택 Update Frames과 Apply to all views in containerchecked.it 왜곡 UI의 90 %의 주위에 해결하고 문제를 수동으로 해결 될 수있는 자동 레이아웃 제약의 휴식.


이것은 또한 레이아웃을 망칠 수 있습니다. IMHO이 작업은 한 번에 한 번에 하나씩 많은주의를 기울이고 계속하기 전에 문제가 해결되었는지 확인해야합니다.
— brainray

예, 오프 코스에서 약간의 시간을 소비해야 하며이 솔루션은 일부 UI를 업데이트하려는 경우와 같이 더 오래 실행하는 데 도움이 될 수 있습니다.
— Anurag Bhakuni

1

Xcode 버전 7.3.1을 사용하여 문제를 해결했습니다. Apple 개발자 포털에서 .dmg 파일을 다운로드 할 수 있습니다. 모든 앱에서 자동 크기 조정을 사용했고 저에게 잘 작동합니다. 이 버그를 수정할 수있는 경우에만 Xcode 8로 업데이트합니다.

여기에서 다운로드하세요 : https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg


이 솔루션은 iOS 10을 지원하려는 경우 쓸모가 없습니다
— jungledev

1

비슷한 문제를 해결하기 위해 xib를 Freeform (추론되지 않음)으로 구성하고 xib 파일을 Xcode 7.x와 호환되도록 저장했습니다. 제 경우에는 두 단계가 모두 필요했습니다. 도움이 되었기를 바랍니다.


1

Xcode 8.2에서 새로운 버튼 하나를 발견했습니다 (이미지의 주황색 원 확인). 도움이 될 것입니다.

단계 : 1. 스토리 보드를 열고 원하는 장치를 선택합니다. 2. 뷰 컨트롤러를 선택하기 만하면됩니다. 3. 언급 된 버튼을 클릭합니다 (이미지 참조). 4. 해당 뷰 컨트롤러의 프레임을 업데이트하고 계속 진행할 수 있습니다.

나는 이것보다 더 나은 해결책을 찾지 못했습니다. 찾은 경우 회신하십시오.

IB 스크린 샷


아무 일도 일어나지 않았습니다.
— Muju

0

viewdidload의 업데이트 제약 조건 및 레이아웃 하위보기는 문제를 해결합니다.

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.