根据设备垂直尺寸自动设置 UIView 垂直尺寸(包括自动布局变化)

Automatically set UIView vertical size based on device vertical size (including Auto Layout changes)

我一直在用谷歌搜索这个问题,但似乎无法确定我所遇到问题的答案。

我正在编写一个应用程序,希望子 UIView 的垂直 space 能够保持设备的高度或父设备的旋转,而不管方向如何,并且无需提前对值进行硬编码。

我的布局结构是:

ViewContainer
  UIView
    UIScrollView
      UIView (Content View)

具体来说,我希望最初将内容视图的垂直 space 设置为当前 运行 所在 device/orientation 的原始高度,并且当设备旋转时,我希望垂直 space 更改为新的垂直高度。 UIScrollView 将仅用于水平平移。

我将使用 Quartz 在视图中绘制。我是否通过 intrinsicContentSize 设置初始高度?如果是这样,我如何查询父视图?

我试过在内容视图中使用 self.superview,但这不起作用。我如何检测到发生了变化,发生变化后,我如何获得新的 Y 分辨率然后应用它?如果不需要,我也不想禁用自动布局。

如果我没有说清楚的话,这是我想要的视觉效果: https://www.evernote.com/l/AAI3VFkKBARPlYPsoURJOwAmIiGielF5p-w

我有一个具有相同视图层次结构的应用程序。

您想要的可以使用纯 AutoLayout 实现,但有以下限制。此处仅包含垂直约束:

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: .allZeros, metrics: nil, views: ["scrollView" : scrollView]))

scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: .Height, relatedBy: .Equal, toItem: scrollView, attribute: .Height, multiplier: 1.0, constant: 0.0))
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[contentView]|", options: .allZeros, metrics: nil, views: ["contentView" : contentView]))

由于 contentView 的高度始终是正确的,不确定您是否仍希望收到方向变化的通知。