Ios Swift:堆栈视图未显示完整的子视图
我有一个子视图: 下面是该视图的子类:Ios Swift:堆栈视图未显示完整的子视图,ios,swift,stack,uistackview,xcode11.4,Ios,Swift,Stack,Uistackview,Xcode11.4,我有一个子视图: 下面是该视图的子类: class MyView: UIView { public init(){ super.init(frame: .zero) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } } 在主视图控制器上,我有一个stackView: 如果将单个视图添加到堆栈视图: override fu
class MyView: UIView {
public init(){
super.init(frame: .zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
在主视图控制器上,我有一个stackView:
如果将单个视图添加到堆栈视图:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
generaRedView()
}
func generaRedView() {
let newView = MyView()
newView.backgroundColor = .red
stackView.addArrangedSubview(newView)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
generaRedView()
generaBlueView()
}
func generaRedView() {
let newView = MyView()
newView.backgroundColor = .red
stackView.addArrangedSubview(newView)
}
func generaBlueView() {
let newView = MyView()
newView.backgroundColor = .blue
stackView.addArrangedSubview(newView)
}
看起来很好:
但我在堆栈视图中添加了两个视图:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
generaRedView()
}
func generaRedView() {
let newView = MyView()
newView.backgroundColor = .red
stackView.addArrangedSubview(newView)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
generaRedView()
generaBlueView()
}
func generaRedView() {
let newView = MyView()
newView.backgroundColor = .red
stackView.addArrangedSubview(newView)
}
func generaBlueView() {
let newView = MyView()
newView.backgroundColor = .blue
stackView.addArrangedSubview(newView)
}
已压缩子视图:
我想问你们的问题是,如何使堆栈视图尊重子视图的大小,并增加堆栈视图的高度,使子视图看起来正常,而不是压缩
非常感谢您的帮助。您需要考虑两件事:
视图的高度和宽度是多少?在你的问题中包含的代码没有显示这些<代码>视图<代码>有任何<代码>帧你设置的不是<代码> > 0 < /代码>所以首先你需要给他们适当的高度来考虑<代码> uistaVIEW/<代码>
UIStackView
分发
。。如何在stackView
中分配视图,并设置堆栈的约束
,使其不固定高度。。如果您固定UIStackView
高度,它将尝试在该高度内布局子视图
约束
,并设置堆栈视图的分布
,而不是固定的高度约束
:
func generaRedView() {
let newView = MyView()
newView.backgroundColor = .red
newView.translatesAutoresizingMaskIntoConstraints = false
newView.widthAnchor.constraint(equalToConstant: 100).isActive = true
newView.heightAnchor.constraint(equalToConstant: 100).isActive = true
stackView.addArrangedSubview(newView)
}
这就是您为视图设置约束的方式。。。。并移除stackView的固定高度约束首先创建一个方法来创建MyView
实例。其次,在将newView
添加到stackView
之前,向其添加高度约束,即
func generateView(with color: UIColor, height: CGFloat) {
let newView = MyView()
newView.backgroundColor = color
newView.translatesAutoresizingMaskIntoConstraints = false
newView.heightAnchor.constraint(equalToConstant: height).isActive = true //here....
stackView.addArrangedSubview(newView)
}
您可以调用上面的方法,如
generateView(with: .red, height: 80.0)
generateView(with: .blue, height: 180.0)
屏幕截图:
您是否正确配置了stackView?请共享您的全部代码。您必须添加要添加到StackView的子视图的高度。如果你不想定义子视图的高度,也可以给StackView指定静态高度。你能发布并举例吗?没有火箭科学先生。。。你能给你的视图高度限制吗?