问题描述
我有一个自定义视图和xib。我在情节提要的控制器视图之一中使用了此自定义视图。
我有一个用例,希望隐藏自定义视图(并将其高度设为零)。现在,我在界面生成器中设置高度并将约束设置为超级视图的边缘:
如您所见,我希望它的高度到处都是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
中:
现在,当您设置bannerView.isHidden = true
时,堆栈视图会自动将其从高度计算中删除,从而导致堆栈视图的高度为零。
设置bannerView.isHidden = false
将重新显示横幅视图及其高度。
由于您希望视图的高度在任何地方都为84,我认为您应该添加一个高度约束出口并将其值设置为84。 将约束值设置为0以隐藏视图(我强烈建议不要通过这样做来隐藏某些视图)。