我正在尝试使用UIStackView
将子视图控制器添加到容器视图中。视图被添加,但是内容大小与我期望的其子视图控制器的大小不一样。
我有两个视图SecondViewController
和ThirdViewController
作为子视图控制器添加到ContainerViewController
。但这些观点并不一致。
// ViewController
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func show() {
let continer = ContainerViewController()
self.present(continer, animated: true)
}
}
// ContainerViewController
class ContainerViewController: UIViewController {
private lazy var contentStackView: UIStackView = {
let view = UIStackView()
view.axis = .vertical
view.spacing = 16.0
return view
}()
override func loadView() {
let mainView = UIView()
mainView.addSubview(self.contentStackView)
let views = [SecondViewController(), ThirdViewController()]
_ = views.map { child in
child.willMove(toParent: self)
addChild(child)
contentStackView.addArrangedSubview(child.view)
child.didMove(toParent: self)
}
self.view = mainView
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
contentStackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
contentStackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
contentStackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
contentStackView.topAnchor.constraint(equalTo: self.view.topAnchor),
contentStackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])
}
public init() {
super.init(nibName: nil, bundle: nil)
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("\(#function) has not been implemented")
}
}
// SecondViewController
class SecondViewController: UIViewController {
var blackView: UIView = {
let view = UIView()
view.backgroundColor = .black
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(blackView)
blackView.snp.makeConstraints { make in
make.leading.top.trailing.equalToSuperview()
make.height.equalTo(100)
}
}
public init() {
super.init(nibName: nil, bundle: nil)
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("\(#function) has not been implemented")
}
}
class ThirdViewController: UIViewController {
var redView: UIView = {
let view = UIView()
view.backgroundColor = .red
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(redView)
redView.snp.makeConstraints { make in
make.leading.top.trailing.equalToSuperview()
make.height.equalTo(100)
}
}
public init() {
super.init(nibName: nil, bundle: nil)
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("\(#function) has not been implemented")
}
}
字符串
使用上面的代码,我想显示背面和红色视图,高度为100 px
。理想情况下,所有内容都与子视图控制器一起存在。
这里我们可以看到当前的输出。
x1c 0d1x的数据
提前感谢!!
1条答案
按热度按时间nwwlzxa71#
make.leading.top.trailing.equalToSuperview()
应该替换为make.edges.equalToSuperview()
,以帮助控制器的视图计算它们的大小。由于只有三个侧面受到限制,他们无法理解他们必须与彩色视图的高度相匹配。此外,如果任务是显示这两个具有固定高度的控制器,那么这里可能应该是另一个底部工作表,与其内容大小相匹配,或者是堆栈视图的灵活底部约束,以便在内容较小时占用更少的空间。