在 iOS 8 中动态更改 ScrollViews 子视图

Changing ScrollViews subview dynamically in iOS 8

我在主页中使用 ScrollView 来垂直滚动视图中的内容(Ipad 分辨率):

为此,我在顶部设置了一个 View,在下方设置了另一个 View

但我想在这里做的是将下面的 View 显示为另一个 View 如果某些条件为真,则显示更大,(例如在 viewDidLoad() 中)和ScrollView 垂直滚动关于另一个 View 的大小,但另一个 View 的大小是实际的两倍,如下图所示:

当然,上图只是我一般喜欢看到的样子,在这种情况下,我希望将 ScrollView 的 contentSize 增加到更高(在运行时)。

我的问题是,当我没有设置相应的约束时,我可以根据需要更改 contentSize,但是当我旋转设备时,我的子视图仍然保持 768 的宽度,但是如果我当我旋转设备时设置自动布局约束一切正常,但我无法更新 ScrollView 的 contentSize,因为它根据他的子视图计算他的指标。

我怎样才能完成这个行为?

还有比 ScrollView 更好的 UI 吗?

以下是如何设置它以便您可以垂直滚动,并以编程方式更新 grayView 的高度。

  1. 将scrollView的上、左、右、下约束到顶层视图的上、左、右、下

  2. 将orangeView的左上右约束到scrollView的左上右。将 orangeView 的宽度限制为等于 scrollView 的宽度。为 orangeView 的高度设置一个约束(比如 200)。

  3. 将grayView的左下右约束到scrollView的左下右。将 grayView 的宽度限制为等于 scrollView 的宽度。为 grayView 的高度设置一个约束(比如 800)。为您的代码添加此约束的 IBOutlet,以便您可以通过更改其 constant 属性 来更新其高度。为此,请在 Document Outline 视图中找到约束,然后按住 Control 键将其拖动到您的代码中以创建 IBOutlet。给它起一个像 grayViewHeight 这样的名字。当你想设置它时做 grayViewHeight.constant = 1000.

  4. 在orangeView和grayView之间添加一个垂直的space约束。

现在,您的 scrollView 的内容大小已完全指定,您可以在需要时扩大它。 orangeView 和 grayView 将自动水平拉伸以在所有方向上匹配 scrollView 的宽度。

  1. 在 Storyboard 中为 UIScrollView 设置委托
  2. 为 scrollView 设置 AutoLayout/AutoResize。
  3. 然后在viewDidLoad()方法中添加如下代码。

    var contentRect: CGRect = CGRectZero
    
    for view: UIView in self.scrollView.subviews
    {
        contentRect = CGRectUnion(contentRect, view.frame)
    }
    self.scrollView.contentSize = contentRect.size
    scrollView.addSubview(viewtoscroll)
    

然后 运行 您的应用。它适用于每种屏幕尺寸。