【发布时间】:2016-05-18 12:07:17
【问题描述】:
我正在向 UIScrollView 内的 UIStackView 添加自定义 UIView。自定义 UIView 是从没有固定宽度的 XIB 创建的。我使用自动布局将自定义视图水平约束到 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 指定的约束设置。
【问题讨论】:
-
你设置了什么约束?看起来还不足以确定高度。
intrinsicContentSize用于当您查看的内容确定最小尺寸时——例如 UILabel 中的文本使用它。 -
所以子视图之间有固定的垂直间距约束,加上一些具有固定高度的图像视图,然后是几个标签,它们具有固有的内容大小。但是,有一个标签的宽度设置为 superview 宽度的 75%,numberOfLines = 0。我怀疑这是罪魁祸首。
标签: ios objective-c uiview xib uistackview