question
case:我想在一个stackView里面放到三个不同颜色的view(约束设置了wight:120,height:20),然后分别间隔10.然后通过navigationController来显示。我希望整个VC的大小根据stackView来变。
问题:发现通过preferredContentSize和view.systemLayoutSizeFitting总会多一点高度,从而导致因为stackView固定了间距10.直接强行将最后一个view的高度拉高了
override var preferredContentSize: CGSize {
set {
super.preferredContentSize = newValue
}
get {
return stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
}
stackView.distribution = .equalSpacing
stackView.distribution = .fill
最终应该改为
override var preferredContentSize: CGSize {
set {
super.preferredContentSize = newValue
}
get {
let navBarHeight = navigationController?.navigationBar.bounds.height ?? 0
print("preferredContentSize height:\(stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height),width:\(stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).width),navBarHeight:\(navBarHeight)")
let fitSize = stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
return CGSize(width: fitSize.width, height: fitSize.height - navBarHeight)
}
}
key:给UINavigationController的preferredContentSize需要减去navBarHeight,因为systemLayoutSizeFit获取的会包含navigationBarHeight,就需要减去这部分