来自XIB的自定义UIView在UIStackView中没有高度

时间:2016-02-08 18:02:48

标签: ios objective-c uiview xib uistackview

我将自定义UIView添加到UIScrollView中的UIStackView。自定义UIView是从没有固定宽度的XIB创建的。我使用autolayout将自定义视图水平约束到UIStackView。自定义视图中的所有子视图都具有固定高度或固有高度(即标签)。

当我将UIView添加到UIStackView时,它们堆叠在一起,好像它们没有高度。 如何根据界面构建器的约束确保堆栈视图中自定义视图的正确高度?

以下是我如何将自定义视图添加到UIStackView:

CustomView *customView = [CustomView loadFromXib]; // helper to load from xib
customView.translatesAutoresizingMaskIntoConstraints = NO;
[_stackView addArrangedSubview:customView];
[_stackView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[customView]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:@{@"customView": customView}]];

我怀疑该问题涉及我的自定义视图的intrinsicContentSize,但我认为这将根据界面构建器中为XIB指定的约束进行设置。

1 个答案:

答案 0 :(得分:3)

我刚刚在swift中遇到过这个问题,我添加到UIStackView的每个自定义视图似乎都出现在0高度并且所有堆叠在彼此之上。

我解决此问题的方法是在添加到UIStackView之前为自定义视图设置高度和宽度约束。

let customView = CustomView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 100), customObject: self.customObject)

customView.widthAnchor.constraint(equalToConstant: customView.frame.width).isActive = true
customView.heightAnchor.constraint(equalToConstant: customView.frame.height).isActive = true

contentStackView.insertArrangedSubview(customView, at: 0)