2014-10-14 4 views
14

iOS 8 및 Xcode 6에서는 스토리 보드에서 크기 클래스를 선택할 수있는 화면 크기 격자가 생깁니다. 다양한 화면 크기에 대한 레이아웃 형식을 선택할 수있는 곳입니다.AutoLayout 크기 클래스를 프로그래밍 방식으로 설정 하시겠습니까?

나는 이것이 각 화면 크기에 대해 기본 제약 조건과 고유 한 제약 조건을 설정할 수 있으므로이 기능이 훌륭하게 도움이된다는 것을 알게되었습니다.

제 질문은 프로그래밍 방식으로 할 수 있습니까? 내 NSLayoutConstraint 정상적으로 만들지 만 다른 화면 크기에 대해 다른 제약 조건을 지정할 수 있어야합니다.

+2

크기 등급이라고합니다. – rckoenes

+0

고마워, 내가 어떻게 그것을 놓쳤는 지 잘 모르겠다! 이제는 'NSLayoutConstraint' 또는 유사하게 프로그래밍 방식으로 크기 클래스를 지정하는 방법 만 있다면. –

답변

1

"크기 클래스"가 실제로 NSObject와 같은 "클래스"가 아니기 때문에 설명서에서 찾기가 다소 어려울 수 있습니다. & 그들은 정말 열거 정의하고/타입 정의라는 : 당신이 기반을 만들 수 있도록 뷰가 UITraitCollection에 대한 UITraitCollection

클래스/입력 방법과이기 UIUserInterfaceSizeClass

방법은 수평 & 세로 크기 클래스를 얻을 수 (예 : 망막 또는하지 않음), UI 특성 (iPad/iPhone) 또는 특정 가로형 & 세로 옵션 (소형, 일반)이 포함 된 다른 특성 컬렉션의 배열에서 볼 수 있지만 솔직히 말해서 확실히 당신이 이것을 어떻게 사용할 것인지 ...

This question은 traitColle willTransitionToTraitCollection(newCollection: UITraitCollection!, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator!)

UITraitCollection과 해당 속성 모두가 읽기 전용이지만, 특정 이유로 새 컬렉션을 만들고 traitCollection이 변경되면 레이아웃 변경을 처리 할 수 ​​있습니다.

This previous question 꽤 유사합니다 & 적응 레이아웃 사용에 대한 Apple의 기사 링크. 또한 WWDC 비디오 "UIKit을 사용하여 적응 형 애플리케이션 구축"을 확인하십시오.

+0

내일 WWDC 비디오를 볼 시간이 있어야합니다. 그러나 뷰 또는 레이아웃 제약 조건의 traitCollection 속성은 설정할 수 없으며 읽기만 가능합니다. 그렇다면 특정 특성 컬렉션에 속하도록 제약 조건을 적용하는 방법은 무엇입니까? 그것들이 가져온 재미있는 변화, 나는 지금까지 그것을 좋아합니다. –

+0

제약 조건 변경 관련 질문을 찾아 추가했습니다. 새로운 UITraitCollections를 생성하고 뷰 'willTransitionToTraitCollection'이 실행될 때 메소드에 전달하는 명확한 메소드가 있습니다 ... 그러나 충분히 플레이하지 않았거나 비디오를 몇 개월 만 지켜 봤습니다. 나도 또 한번 봐야 할 시간이야! 나에게 적응 형 레이아웃을위한 프로세스 및 문서화는 매우 가난하고 혼란 스럽다. 큰 새로운 기능이기 때문에 ... 결국 알아낼 것이다! – mc01

12

iOS 8은 NSLayoutConstraintactive 속성을 도입했습니다. 제약 조건을 활성화하거나 비활성화 할 수 있습니다. 여러 제약 조건을 활성화/비활성화하는 방법도 있습니다. 프로그램을 만들 때

+ (void)activateConstraints:(NSArray *)constraints 
+ (void)deactivateConstraints:(NSArray *)constraints 
  • 배열에 제약을 유지합니다.
  • 필요한 각 레이아웃에 대한 배열을 만듭니다.
  • willTransitionToTraitCollection
+0

2017 년에 감사하지만 어쩌면 다른 방법이 있을까요? –

1

귀하의 질문에 대답하기 위해 내 프로그래밍 크기 클래스를 설정할 수 있습니다에서 당신이 그러나, 그것은 고통의 약간의 필요 제약의 어떤 세트를 활성화/비활성화합니다. "setOverrideTraitCollection"을 호출해야하지만 부모 뷰 컨트롤러에서 실제로 특성을 변경하고자하는 것이 아닙니다.

필자는 iPad의 분할보기 컨트롤러의 마스터 VC를 iPhone의보기와 다르게 변경하려고했지만 기본적으로 너비 조정/보통 높이로 설정되었습니다. 그래서 Master의 nav 컨트롤러를 서브 클래 싱하고 iPhone이 아닌 경우 Master의 특성을 Regular 너비로 설정하는 코드를 추가했습니다.

스위프트 코드 :

class MasterNavigationController: UINavigationController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     if (self.traitCollection.userInterfaceIdiom != .Phone) { 
      let newTraitCollection = UITraitCollection(horizontalSizeClass: .Regular) 
      self.setOverrideTraitCollection(newTraitCollection, forChildViewController: self.topViewController) 
     } 
    } 

} 

나는이 비슷한 솔루션을 찾고 사람을 도움이되기를 바랍니다.

+0

크기 클래스를 수동으로 설정했지만 이전에 선언 된 제약 조건을 어떻게 처리해야합니까? 그들이 속한 특성을 정확히 감지하는 방법? –

+0

스토리 보드의 각 크기 클래스에 대한 제약 조건이 설정됩니다 (하단의 장치 아이콘 사용). WWDC 2016의 비디오가 있습니다. WWDC 2016에서 최근에 어떻게 바뀌 었는지 설명합니다. https://developer.apple.com/videos/play/wwdc2016/236/ –

+0

스토리 보드에 대해 알고 있지만 프로그래밍 방식으로 선언 된 제약 조건에 관한 질문이었습니다. –

관련 문제