2014-12-18 4 views
5

Autolayout 및 크기 클래스를 사용하여 xib에서 뷰를로드하고 있습니다. 이 뷰에는 하위 뷰인 viewWithSizeClasses이 있으며 크기 클래스에 따라 높이가 제한됩니다.loadNibNamed 및 크기 클래스를 사용하여 제약 조건 얻기

내가하려는 것은 현재 크기 클래스에 따라 적절한 높이를 얻으려면 loadNibNamed 바로 뒤에 제약 조건을로드하는 것입니다.

나는 layoutSubviews(), updateConstraints()의 다양한 조합을 시도했지만 내가 상관없이 내가 항상 기본 모든, 모든 높이를 얻고있다.

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    let xibView = NSBundle.mainBundle().loadNibNamed("View", owner: self, options: nil).first as View 

    self.view.addSubview(xibView) 
    height = xibView.viewWithSizeClasses.frame.size.height // <- Any, Any height 
} 

저는 iOS8 이상에서 배포하고 있습니다.

+0

수정 한 적이 있습니까? –

+1

아니, 분명히 이것은 불가능합니다. :/ –

+0

크기 클래스는 기본적으로 스토리 보드 외부에서는 쓸모가 없습니까? :/ –

답변

0

iPhone vs iPad의 경우 별도의 구속 조건을 사용하여 동일한 xib를 사용하면서 동일한 문제가 발생했습니다. 내 솔루션은 동일한 xib 내에서 각 크기 클래스에 대한보기를 만드는 것이 었습니다. 그런 다음 xib을로드 할 때 인덱스별로 적절한보기에 액세스하십시오. 내 경우에는, 내 모든-어떤 크기 클래스는 당신이 스위프트에 그 번역 할 수 있습니다 확신

NSArray *views = [NSBundle.mainBundle loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; 
UIView *view = views[IS_IPAD]; 

인덱스 1부터 인덱스 0 및 정기-일반에 있습니다. 전역 매크로도 정의했습니다.

#define IS_IPAD (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)