带有嵌入式 StackView 问题的 ScrollView

ScrollView with embedded StackView issue

我有一个 scrollView,里面放了一个 stackViewscrollView 被限制为 rootview。堆栈视图将显示一个 xib 视图。

xib 视图的长度各不相同。 xib 视图标记为 simpleVC0simpleVC1simpleVC0的长度是2500,simpleVC1的长度是1000。

我的问题是,当 xib 视图显示在堆栈视图中时,scrollView 的长度不会更改为显示的 xib 视图的长度。 这就像呈现了 xib 视图但滚动视图被锁定在特定长度。

这里是 simpleVC0 xib 视图。 运行 后跟它。当我尝试滚动时,它不允许我滚动到 xib 视图的底部。它似乎以一定的长度切断了 xib 视图。 说这可能是一个可能必须在代码中解决的问题是正确的吗?还是可以通过约束解决它。 我已经尝试过自动布局约束,但是它们没有用。

我已将所有四个边的 scrollView 限制为 rootview。 加载根视图时,使用以下代码建立 xib:

    //Different subViews for ingredients and steps
    if counter == 0 {
        simpleViewX = SimpleVC0().view
        simpleViewY = SimpleVC1().view
        stack.addArrangedSubview(simpleViewX)
        stack.addArrangedSubview(simpleViewY)
    }

视图是通过更改分段视图控制器的值显示的隐藏视图。如下所示:

    @IBAction func tabselected(_ sender: Any) {
    switch (sender as AnyObject).selectedSegmentIndex {
    case 0:
        simpleViewY.isHidden = true
        simpleViewX.isHidden = false

        break
    case 1:
        simpleViewX.isHidden = true
        simpleViewY.isHidden = false

        break
    case 2:
        //calledvideo in array is the value of the counter.
        calledVideo = vids[counter]
        geturl()
        break
    default:
        break
    }
    }

要将 UIStackViewUIScrollView 一起使用,您需要允许堆栈视图根据其内容扩展其高度。

在故事板中进行布局时,为堆栈视图提供高度限制(以满足 IB 的要求),但为该高度限制提供低优先级。

然后,添加排列的子视图时,堆栈视图将垂直增长。

根据您显示的图片,这是一个完整的示例:https://github.com/DonMag/XIBsInScrollView

您必须在代码中修改 scrollView 的 contentSize 属性。我不知道如何用情节提要来处理它,但你可以为你的 scrollView 做一个出口,并在每次它改变时计算新的高度(每次你添加或删除其中的东西)

scrollView.contentSize = CGSize(width:yourNewW, height:yourNewH)