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

时间:2015-05-12 04:34:16

标签: ios uiview uiscrollview ios-autolayout

我一直在谷歌上搜索,似乎无法找到我所拥有的问题的答案。

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

我的布局结构是:

ViewContainer
  UIView
    UIScrollView
      UIView (Content View)

具体来说,我希望内容视图的垂直空间最初设置为当前正在运行的设备/方向的原生高度,当设备旋转时,我希望垂直空间为更改为新的垂直高度。 UIScrollView将仅用于水平平移。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

使用纯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的高度始终正确,因此无法确定是否仍希望收到方向更改的通知。