我正在使用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或更新版本上部署。
答案 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)