使用loadNibNamed和Size Classes获取约束

时间:2014-12-18 15:38:45

标签: ios ios8 autolayout xib size-classes

我正在使用Autolayout和Size Classes从xib加载视图。在该视图中,有一个子视图viewWithSizeClasses,其高度受到大小等级的约束。

我要做的是在loadNibNamed之后加载约束,以便根据当前的Size Class获得正确的高度。

我尝试了layoutSubviews()updateConstraints()的各种组合,但无论我做什么,我总是得到默认的 Any,Any 高度。

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或更新版本上部署。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的麻烦,试图使用相同的xib和iPhone与iPad的单独约束。我的解决方案是为同一个xib中的每个size类创建一个视图。然后在加载xib时,通过索引访问正确的视图。就我而言,我的Any-Any大小类位于索引0处,而Regular-Regular位于索引1处。

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

我相信你可以把它翻译成Swift。我还定义了一个全局宏

#define IS_IPAD (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)