对 how/where 设置 Xib 的高度感到困惑

Confused about how/where to set a Xib's height

我有一个自定义视图和 xib。我在情节提要的控制器视图之一中使用了这个自定义视图。

我有一个用例,我希望能够隐藏自定义视图(并将其高度设为零)。现在,我在界面构建器中设置高度并设置对超级视图边缘的约束:

如您所见,我希望它的高度到处都是 84

现在这是我的自定义视图 class:

import UIKit

@IBDesignable
class BannerView: UIView {

    @IBOutlet var contentView: UIView!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        initialize()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initialize()
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        initialize()
    }
    
    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        initialize()
        contentView?.prepareForInterfaceBuilder()
    }
    
    func initialize() {
        guard let view = loadViewFromNib() else { return }
        view.frame = self.bounds
        view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        addSubview(view)
        contentView = view
    }

    func loadViewFromNib() -> UIView? {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "BannerView", bundle: bundle)
        return nib.instantiate(withOwner: self, options: nil).first as? UIView
    }
    
    func hide() {
        // Hide the view and set its height to zero here
    }

}

但是,现在我很困惑......当我将自定义视图加载到我的故事板之一时,我是否也应该在自定义视图上设置高度限制?还是它的高度应该到处都是 84 而我不应该再指定它?

此外,如何在上述 hide() 函数中隐藏自定义视图并将其高度设置为零?

因为您希望视图的所有位置的高度都是 84,所以我认为您应该添加一个高度限制出口并将值设置为 84。 将约束值设置为 0 以隐藏视图(我强烈建议不要通过这样做来隐藏某些视图)。

有几种方法可以做到这一点...这是一种。

给出你的 xib 约束的内容,使其高度为 84 磅。你还没有展示你的 xib 的布局,但我假设你知道如何去做。

然后,当您将 BannerView 添加到主视图时(我猜这就是您正在做的),将其嵌入具有以下属性的垂直 UIStackView 中:

现在,当您设置 bannerView.isHidden = true 时,堆栈视图会自动将其从高度计算中删除,导致堆栈视图的高度为零。

设置 bannerView.isHidden = false 将 re-display 横幅视图及其高度。