Swift 在iOS 8中动态更改ScrollView子视图

Swift 在iOS 8中动态更改ScrollView子视图,swift,ios8,autolayout,scrollview,Swift,Ios8,Autolayout,Scrollview,我在主页中使用ScrollView垂直滚动视图中的内容,如下所示(Ipad分辨率): 为此,我在顶部设置了一个视图,在下面设置了另一个视图 但是我想在这里做的是改变下面的视图以显示另一个视图,如果某个条件为真(例如在viewDidLoad()中),滚动视图垂直滚动另一个视图的大小,但另一个视图的大小是实际大小的两倍,如下图所示: 当然,上面的图像通常只显示我喜欢的内容,在本例中,我希望将ScrollView的contentSize增加到更高的级别(在运行时) 我这里的问题是,当我没有设置相应

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

为此,我在顶部设置了一个
视图
,在下面设置了另一个
视图

但是我想在这里做的是改变下面的
视图
以显示另一个
视图
,如果某个条件为真(例如在
viewDidLoad()
中),滚动视图垂直滚动另一个
视图的大小,但另一个
视图的大小是实际大小的两倍,如下图所示:

当然,上面的图像通常只显示我喜欢的内容,在本例中,我希望将ScrollView的
contentSize
增加到更高的级别(在运行时)

我这里的问题是,当我没有设置相应的约束时,我可以根据需要更改
contentSize
,但当我旋转设备时,我的子视图仍保持768的宽度,但是如果我在旋转设备时设置自动布局约束,所有这些都可以正常工作,但是我不能更新ScrollView的
contentSize
,因为它根据他的子视图计算他的度量

我怎样才能做到这一点


还有比ScrollView更好的UI吗?

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

  • 将滚动视图的顶部、左侧、右侧和底部约束到顶层视图的顶部、左侧、右侧和底部

  • 将orangeView的左侧、顶部和右侧约束到scrollView的左侧、顶部和右侧。将orangeView的宽度限制为等于scrollView的宽度。为orangeView的高度设置约束(例如
    200

  • 将灰色视图的左侧、底部和右侧约束到滚动视图的左侧、底部和右侧。将灰色视图的宽度约束为等于滚动视图的宽度。设置灰视图高度的约束(例如
    800
    )。对代码的此约束设置一个
    IBOutlet
    ,以便可以通过更改其
    常量
    属性来更新其高度。要做到这一点,请在DocumentOutline视图中找到约束,并控制从它拖动到代码中以创建IBOutlet。给它起个名字,比如
    grayViewHeight
    。当您要设置它时,请执行
    grayViewHeight.constant=1000

  • 在orangeView和grayView之间添加垂直空间约束

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

  • 脚本中UIScrollView的设置委托
  • 为scrollView设置自动布局/自动调整大小
  • 然后在viewDidLoad()方法中添加以下代码


  • 然后运行你的应用程序。它适用于每个屏幕大小。

    你是说你希望顶部视图有一个固定的大小(比如200),然后底部视图有所有剩余的大小?例如,底部视图高度=屏幕高度-200?@Aggressor是的,下面的视图具有滚动视图的其余高度。请您再次解释您的底部段落好吗?不完全是clear@Aggressor问题的主要目标是,一旦设置了autolayout约束,如何更改ScrollView的contentSize,因为当您在旧视图中设置另一个视图时,如果contentSize保持在1024,例如,其余的内容将无法滚动,并且视图比以前更大。这不正是我想要的,但是你的回答给了我一个好主意,我解决了这个问题。非常感谢!
    var contentRect: CGRect = CGRectZero
    
    for view: UIView in self.scrollView.subviews
    {
        contentRect = CGRectUnion(contentRect, view.frame)
    }
    self.scrollView.contentSize = contentRect.size
    scrollView.addSubview(viewtoscroll)