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 FramesApply 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.