5

我正在使用自动布局和大小类从 xib 加载视图。在该视图中,有一个子视图 ,viewWithSizeClasses其高度的约束取决于大小类。

我要做的是在之后立即加载约束loadNibNamed,以便根据当前的大小类获得正确的高度。

我尝试了 的各种组合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 或更高版本上进行部署。

4

1 回答 1

0

我在尝试对 iPhone 和 iPad 使用具有不同约束的相同 xib 时遇到了同样的麻烦。我的解决方案是为同一个 xib 中的每个尺寸类创建一个视图。然后在加载 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)
于 2017-05-20T17:09:53.523 回答