对于如何/在哪里设置Xib的高度感到困惑

问题描述

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

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

enter image description here

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

在这是我的自定义视图的类:

84

但是,现在我很困惑……在将自定义视图加载到我的故事板之一时,是否还应该在自定义视图上设置高度限制?还是应该将它的高度设置为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函数中隐藏自定义视图并将其高度设置为零?

解决方法

有几种方法可以执行此操作。

给出xib约束的内容,使其高度为84点。您尚未显示xib的布局,但我假设您知道该怎么做。

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

enter image description here

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

设置bannerView.isHidden = false将重新显示横幅视图及其高度。

,

由于您希望视图的高度在任何地方都为84,我认为您应该添加一个高度约束出口并将其值设置为84。 将约束值设置为0以隐藏视图(我强烈建议不要通过这样做来隐藏某些视图)。