我的UIStackView
中有一个ViewController
:
stackView = UIStackView()
stackView!.axis = NSLayoutConstraint.Axis.vertical
stackView!.distribution = UIStackView.Distribution.fill
stackView!.alignment = UIStackView.Alignment.fill
我用四个ColoredView's
(我的UIView
的子类)填充它。该视图的特殊之处在于它的intrinsicContentSize
取决于当前设备的方向:
override var intrinsicContentSize: CGSize {
let h = getHeightAccordingToDeviceOrientation()
printDebug("height is ", h)
return CGSize(width: .greatestFiniteMagnitude, height: h)
}
func getHeightAccordingToDeviceOrientation() -> CGFloat
{
let app = UIApplication.shared;
return app.statusBarOrientation == UIInterfaceOrientation.landscapeLeft
|| app.statusBarOrientation == UIInterfaceOrientation.landscapeRight ? 50 : 100
}
我希望前三个coloredViews的高度等于它们的intrinsicContentSize.height
值,并且使最后一个视图的高度等于uiStackView
的剩余高度。
因此,假设设备面向横向,则coloredView的intrinsicContentSize.height
为50。
假设stackView具有一定的高度,例如700。
我希望视图布局如下:
并希望当设备方向更改时该值无效。像这样:
但是现在,当我旋转设备时,这些值不会更新。
仅当viewController首次出现在屏幕上时,才访问视图的intrinsicContentSize
。旋转设备时,断点不会碰到intrinsicContentSize
属性。
我也尝试过UIStackView.Distribution.fillProportionally
。
我想念什么?
我已经推送了示例仓库here。