Xcode 6 어댑티브 UI는 iOS 7 및 iOS 6과 어떻게 호환됩니까?


137

방금 WWDC 비디오 # 216, "UIKit으로 적응 형 UI 구축"을 보았습니다.

Tony Ricciardi는 약 45:10에 Xcode 6의 IB 변경 사항에 대해 이야기하여 새로운 변경 사항을 지원합니다.

"이러한 문서를 이전 버전의 iOS로 거꾸로 배포 할 수 있습니다"라고 말합니다.

"이러한 문서"는 여러 크기 클래스에 대한 특정 설정이있는 XIB 및 스토리 보드를 의미합니다.

나는 이것을 만들고 있지 않다. WWDC 비디오를보십시오.

어떻게 가능합니까? 특성 컬렉션과 크기 클래스는 iOS 8에서만 정의됩니다. iOS 8에 새로운 UI 구문에 의존하는 런타임 동작은 이전 iOS 버전에서 어떻게 작동합니까?

이 경우 이다 가능한 그것은 좋은 것입니다. iOS 6, 7, 8에서 실행되는 앱을 빌드하고 Apple이 Xcode 6에 추가 한 새로운 유연한 UI 레이아웃 기능을 활용할 수 있습니다. 코드에서 직접 적응 형 UI 로직을 만들었습니다. 일의.


2
Apple에서 제공 하는 문서도 있습니다. <8
Alladinian

답변:


151

Interface Builder DO의 크기 클래스가있는 UI의 변경 사항은 iOS 7 장치 및 Xcode의 미리보기에서 올바르게 나타납니다. 예를 들어, 일정한 높이에 대한 자동 레이아웃 구속 조건 및 글꼴 크기를 변경했습니다. 일정한 폭 일정한 변경 폭은 iOS 7.0을 실행하는 iPad 시뮬레이터에서 볼 수 있습니다.

컴팩트 한 높이를 가진 크기 클래스를 제외한 모든 크기 클래스 최적화는 iOS 7에서 사용할 수 있습니다. 이것은 Apple에 의해 확인되었으며 이제 설명서에 직접 명시되어 있습니다 .

iOS 8 이전의 iOS 버전을 지원하는 앱의 경우 대부분의 크기 클래스는 이전 버전과 호환됩니다.

크기 클래스는 다음과 같은 경우 이전 버전과 호환됩니다
.-앱이 Xcode 버전 6 이상을 사용하여 빌드 됨
-앱의 배포 대상이 iOS 8보다 빠름
-크기 클래스가 스토리 보드 또는 xib에 지정됨
-높이 구성 요소의 값이 작지 않음

iOS 7은 몇 가지 크기 클래스를 존중하지 않기 때문에 사용하면 문제가 발생할 수 있습니다. 예를 들어, Compact w Any h를 정의한 다음 Compact w Compact h를 정의한 경우 iOS 7에서는 Compact w Any h를 존중하지만 iOS 8에서는 Compact w Compact h 모양을 렌더링합니다.

따라서 두 가지 크기 클래스를 사용하고 iOS 7과의 호환성을 유지하려면 Any w Any h 또는 Compact w Any h에서 iPhone에 대해 원하는 최적화를 수행 한 다음 다른 크기 클래스에 대해 다른 최적화를 수행하십시오 필요한 경우 높이가 작은 크기 클래스를 사용할 필요가 없으며 문제가 발생하지 않습니다.


Beta4에서는 Compact / Compact 크기 클래스가 시뮬레이터 또는 iOS 7 장치에서 존중되지 않음을 확인할 수 있습니다. 그래도 일부 규모 클래스가 존중된다는 점에 흥미가 있습니다. 테스트 해 주셔서 감사합니다.
remmah

장치에서 일반 / 일반 테스트를 수행 한 후 크기 클래스 사용자 지정에 응답하지 않습니다. 베타 7
hokiewalrus를

@ hokiewalrus 방금 Xcode 6 베타 7로 확인한 결과 답변에서 자세히 설명한 것과 동일한 결과를 얻습니다. IB에서 Regular Regular의 상자 너비를 변경하면 iOS 7.1을 실행하는 iPad에서 올바르게 표시됩니다.
Jordan H

3
@Joey 이것은 버그가 아니다. 이것은 의도적입니다. Compact-CompactiOS 7 용으로 내보내지지 않습니다. Compact-Regular입니다. 자세한 내용은 내 답변을 참조하십시오.
Dave DeLong

2
허용되는 답변이어야합니다. 위의 답변은 잘못된 것입니다.
Dominic Lacaille

68

앱을 iOS 7에 배포 할 때 Xcode는 스토리 보드를 두 가지 방식으로 컴파일합니다.

  • iPhone의 경우 스토리 보드는 "Compact-Regular"(컴팩트 한 너비, 일반 높이)로 컴파일되며 "~ iphone"펜촉으로 패키지됩니다.

  • iPad의 경우 스토리 보드는 "Regular-Regular"로 컴파일되고 "~ ipad"펜촉으로 패키지됩니다.

따라서 iOS 7과 iOS 8 모두에 배포하려는 경우 디자인을 Compact-Any 및 Regular-Any 크기 클래스에 중점을 두어야합니다. 그러면 배포 대상에서 UI를 일치시키는 데있어 최고의 경험을 제공 할 수 있습니다. 물론 다른 크기 클래스의 레이아웃을 수정할 수는 있지만 해당 수정 사항이 Compact-Regular 또는 Regular-Regular 크기 클래스에 적용되지 않으면 iOS 7에서 해당 수정 사항이 표시되지 않습니다.


귀하의 답변에 대한 나의 이해는 "일반-일반"이 iPad iOS7에서 작동한다는 것입니다. 그러나 작동하지 않습니다. XCode6 GM 릴리스에서 테스트했습니다. 당신의 대답을 잘못 해석 한 경우에는 바로 정정 해주세요.
Iducool

4
정기적 인 규칙적인 작업은 스토리 보드에서만 가능하며 xib가 아닙니다.
Boris Charpentier

나는 그것에 대해 버그보고 @BorisCharpentier // 18737656 : rdar 열 # 18490866의 중복으로 폐쇄되었다,
맥심 파블로프

@BorisCharpentier xib에 대한 해결책을 찾으셨습니까?
saadnib

4
@BorisCharpentier, 난 그냥이 문제가 :-) 엑스 코드 6.1.1에서 해결 된 것을 발견
saadnib

27

참고 :이 답변은 베타 버전의 Xcode 6과 관련이 있으며 더 이상 배송 버전에는 적용되지 않습니다. 적절한 정보는이 페이지에서 JoeyDave DeLong의 답변을 참조하십시오 .

(원래 답변은 아래에 유지됨) :


Storyboards/XIBs크기 클래스를 사용하도록 구성된 동안에 iOS 7OS가이를 존중하지 않고 size classes기본 'Any / Any'크기 클래스를 사용하는 것으로 보입니다.

귀하가 언급하는 특정 슬라이드가 그러한 호환성을 약속하는 것으로 보이지만 현재는 그렇지 않은 것으로 보입니다 (Xcode 6 beta 2).

테스트하기 위해 Any / Any 크기 클래스를 (iOS 8 SDK, deployment target of 7.1)중심으로 vertically and horizontally하지만 Compact / Compact 크기 클래스 (예 : iPhone의 가로 방향)의 왼쪽 상단에 정렬 된 단일 버튼 으로 프로젝트 를 만들었습니다 . Xcode의 미리보기 길잡이는 버튼의 위치가 iOS 8로 바뀌지 만로 바뀌지 않음을 보여줍니다 iOS 7. iOS 7장치 에서도이 동작을 확인했습니다 .


로이, 답장을 보내 주셔서 감사합니다. 나는 이것을 직접 테스트 할 시간이 없었으며 그것을 고맙게 생각한다. 그 비디오의 발표자가 더 분명해야합니다. 필자는 iOS 6 및 7에서 XIB / Storyboard 파일을 읽을 수 있지만 적응 형 UI를 지원하지 않으면 서 의미가 있어야한다고 생각합니다. iOS <8에서 실행되는 앱을 코딩하는 데 문제가 있습니다.
Duncan C

과연. 동일한 Storyboard / XIB에서 새로운 크기의 클래스와 이전 오리엔테이션 / 이디엄 접근법을 지원하는 방법에 대한 공식 문서가 있는지 궁금합니다. 찾은 내용이 있으면 답변을 업데이트하겠습니다.
remmah

필자의 경험에 따르면 Apple은 이전 버전의 OS가 새 버전을 발표하자마자 존재하지 않는다고 생각합니다. 실제로 엔지니어링 팀은 새로운 OS 버전이 출시되는 즉시주의를 기울이지 않고 모든 주요 에너지를 다음 주요 버전에 집중하기 시작합니다. 현재 주요 릴리스에서 수정 한 버그는 없었습니다. 그들은
Duncan C

3
더 이상 Xcode 6 베타 4의 경우가 아닙니다. 방금 추가 한 답변을 참조하십시오.
Jordan H

1
@Joey 고마워; 독자의 답변과 Dave의 답변을 참조하도록 답변을 수정했습니다.
remmah

12

답변과 의견 중 일부는 이전 버전과의 호환성에 대해 논의하면서 Apple 설명서 에서 발췌 한 내용을 직접 공유하겠다고 생각했습니다 .

~~~~~

이전 iOS 버전에서 크기 클래스가있는 앱 배포

iOS 8 이전의 iOS 버전을 지원하는 앱의 경우 대부분의 크기 클래스는 이전 버전과 호환됩니다.

다음과 같은 경우 크기 클래스가 이전 버전과 호환됩니다.

  • 앱은 Xcode 버전 6 이상을 사용하여 빌드되었습니다.
  • 앱의 배포 대상이 iOS 8 이전
  • 크기 클래스는 스토리 보드 또는 xib에 지정됩니다.
  • 높이 구성 요소의 값이 작지 않습니다

~~~~~

마지막 글 머리 기호는이 논의를 목표로하고 있는데, 여기서 "소형 높이"를 사용 하지 않는 한 , 이전 버전과의 호환성을 유지해야합니다.

이것이 누군가를 돕기를 바랍니다!


게시에 감사합니다. 이제 문서화되었습니다.
Jordan H

3

비슷한 문제를 처리하는 동안 아직 여기에서 보지 못한 다른 답변을 발견했습니다. XIB파일의 크기 클래스 가 전혀 작동하지 않는 것 같습니다. storyboard파일 에서 셀 프로토 타입을 만들면 다른 답변에서 설명한 것처럼 iOS7에서 작동하지만 동일한 프로토 타입 셀이 별도의 XIB파일 크기 로 이동하면 iOS7에서 무시됩니다.

다음은이 동작을 보여주는 샘플 프로젝트에 대한 링크입니다. https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.zip

프로토 타입 셀에는 회색보기의 각 가장자리에서 4 가지 제약 조건이 있습니다. 각각은 같은 방식으로 구성됩니다 : Any / Any-10, Regular / Regular-20

여기에 이미지 설명을 입력하십시오

XIB와 Storyboard 모두 iOS8 시뮬레이터에서 잘 작동하며 iOS7에서는 Storyboard에 정의 된 셀 만 iPad의 제약 조건이 업데이트됩니다.

여기에 이미지 설명을 입력하십시오


$ ^ % $ ^ % @ # ^ & @ # % & ^ % ... 그리고 여기에 많은 xib 파일이 있고 iOS 7 및 8에 배포됩니다.
TheEye

바로 그거죠. 나는 iPhone과 iPad 스토리 보드를 하나로 결합하고 셀을 자체 XIB 파일로 분리하면 도움이 될 것이라고 생각했습니다. :) 내 답변을 +1 할 수 있다면 감사하겠습니다.
sha

1
나는이 같은 행동을보고있다.
bjtitus

2

시간을 절약 할 수 있다면 Xcode 6이 크기 클래스에 준-역 호환성을 제공하는 방식은 역사 적이고 접미사가있는 스토리 보드를 통해서만 가능 하다고 생각 합니다 . 크기 클래스는 이전에 iPad 스토리 보드와 iPhone 스토리 보드를 정의한 방법에 대한보다 추상적 인 방법이므로 의미가 있습니다.~ipad~iphone

따라서:

  • 크기 클래스를 사용하여 장치 제품군 별 레이아웃 (iPad 대 iPhone)을 지원하는 것이 목표라면 운이 좋을 것입니다. 크기 클래스는 이전에 지원 된 방법에 대한 더 좋은 인터페이스입니다.

  • 당신의 목표는 내 다른 모델에 대한 변경된 레이아웃을 지원하기 위해 크기의 클래스를 사용하는 경우 같은 예 - 디바이스 제품군. iPhone 5/6/6 이상 풍경, 그럼 당신은 운이 없습니다 . 이를 사용하려면 최소 iOS 8 배포 대상이 필요합니다.


1

@lducool-인터페이스 빌더의 Identity 인스펙터에서 'Builds For'를 iOS7.1 이상으로 변경하십시오.


출력에 차이가 없습니다.
Iducool

1

불행히도 Dave와 Joey의 답변은 저에게 효과적이지 않습니다. 이 글타래에 댓글을 달 수 없으므로이 곳이 잘못된 경우 용서해주세요.

: 그에 대한 특정 질문까지 만든 아이폰 OS 7 이전 버전과 호환 예 아이폰 세로 풍경 적응 UI를

지금까지 배운 내용에서 필자는 예제와 같이 크기 클래스를 기반으로 한 iPhone iOS7의 세로 및 가로 모드에서 하나의 ui 요소에 대해 서로 다른 두 가지 제약 조건을 가질 수 없다고 생각합니다. 그래도 내가 잘못하면 기쁠 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.