当设备方向改变时,如何使uiStackView的子视图的innerContentSize无效?

时间:2018-10-18 11:05:01

标签: ios swift

我的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。 我希望视图布局如下:

  • [第一视图]-高度为50
  • [第二个]-高度为50
  • [第3个]-高度为50
  • [第4个]-高度为550(700-50x3)。

并希望当设备方向更改时该值无效。像这样:

  • [第一视图]-高度为100
  • [第二个]-高度为100
  • [第3个]-高度为100
  • [第4个]-高度为400(700-100x3)

但是现在,当我旋转设备时,这些值不会更新。 仅当viewController首次出现在屏幕上时,才访问视图的intrinsicContentSize。旋转设备时,断点不会碰到intrinsicContentSize属性。

我也尝试过UIStackView.Distribution.fillProportionally。 我想念什么? 我已经推送了示例仓库here

0 个答案:

没有答案