对 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 横幅视图及其高度。
我有一个自定义视图和 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 横幅视图及其高度。