【问题标题】:Confused about how/where to set a Xib's height对如何/在哪里设置 Xib 的高度感到困惑
【发布时间】:2021-01-13 14:38:44
【问题描述】:

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

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

如你所见,我希望它的高度在任何地方都是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,我不应该再指定它了吗?

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

【问题讨论】:

    标签: ios swift xcode interface-builder


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我应该在 Xib 中设置高度限制,还是在情节提要控制器中包含自定义视图?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 2015-07-29
      • 2016-05-21
      • 2012-05-03
      • 2019-10-14
      • 2017-02-03
      相关资源
      最近更新 更多