Ios 包含内容的优先级不适用于视图中的自定义视图和标签

Ios 包含内容的优先级不适用于视图中的自定义视图和标签,ios,swift,uiview,uilabel,uistackview,Ios,Swift,Uiview,Uilabel,Uistackview,我在使用自定义视图时很难获得内容拥抱。我有以下代码: pillView.setContentHuggingPriority(.required, for: .horizontal) pillView.setContentCompressionResistancePriority(.required, for: .horizontal) dateLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) dateLabel.setC

我在使用自定义视图时很难获得内容拥抱。我有以下代码:

pillView.setContentHuggingPriority(.required, for: .horizontal)
pillView.setContentCompressionResistancePriority(.required, for: .horizontal)
dateLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
dateLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
我将这两个视图添加到堆栈视图中:

让dateStackView=UIStackView(ArrangedSubview:[pillView,dateLabel])

结果是这样的:

LIVE NOW视图应该包含它的内容。它的定义如下:

final class PillView: UIView {

    private enum Constants {
        static let radius: CGFloat = 4.0
        static let labelInsets = UIEdgeInsets(horizontal: 8.0, vertical: 4.0)
    }

    enum Config {
        case attention

        var font: UIFont {
            switch self {
            case .attention: return Font.caption
            }
        }
        var textColor: UIColor {
            switch self {
            case .attention: return .white
            }
        }
        var backgroundColor: UIColor {
            switch self {
            case .attention: return Theme.red100
            }
        }
    }

    // MARK: - Properties

    private let config: Config

    // MARK: - Initializers

    init(text: String, config: Config = .attention) {
        self.config = config
        super.init(frame: .zero)

        backgroundColor = config.backgroundColor
        clipsToBounds = true
        layer.cornerRadius = Constants.radius

        let label = UILabel()
        label.font = config.font
        label.textColor = config.textColor
        label.text = text

        addSubview(label)
        label.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
          label.topAnchor.constraint(equalTo: topAnchor, constant: Constants.labelInsets.top),
          label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -Constants.labelInsets.bottom),
          label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: Constants.labelInsets.left),
          label.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -Constants.labelInsets.right)
        ])
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

不知道为什么它在堆栈视图中不会包含内容。有什么想法吗?如果你能给我一些建议,我会非常感激的。谢谢

检查stackview的分发属性。 它不应该是,因为它将忽略其他视图的配置。 将其值标记为
fill

编辑:

按比例向我提供以下结果:

在您的
PillView
init(…)
func中添加以下行:

label.setContentHuggingPriority(.required, for: .horizontal)
label.setContentCompressionResistancePriority(.required, for: .horizontal)

然后,您无需为
pillView
dateLabel
实例设置这些属性。

pin(to:insets:)的作用是什么?您能显示它的声明吗?很抱歉,它是用于添加约束的扩展。我更新了问题。由于某种原因,我无法重现这种行为。。。红色标签像我期望的那样包裹着它的内容。@Sweeper你能分享你的代码吗?和。请注意,红色标签并不抵抗内容压缩。它是
fill
<代码>填充是默认值。@Kex按比例尝试填充一次这不是第一次label@Kex您是否可以尝试将stackview的尾部约束设置为大于等于,而不是euqal?是否允许stackview根据内容进行收缩或扩展?