【问题标题】:Custom UIView from XIB has no height in UIStackView来自 XIB 的自定义 UIView 在 UIStackView 中没有高度
【发布时间】: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


【解决方案1】:

我刚刚在 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 2016-01-27
    • 2015-04-17
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多