Ios 不滚动子视图的视图

Ios 不滚动子视图的视图,ios,swift,uiscrollview,uistackview,Ios,Swift,Uiscrollview,Uistackview,我有一个UIScrollView,其中添加了一个子视图的UIScrollView。子视图是不可滚动的,但是如果我添加按钮而不是UIView,堆栈视图是可滚动的。此代码显示在拆分视图控制器的详细视图中。知道为什么子视图不滚动吗? 顺便说一句,detailItem将携带索引,但目前我正在硬编码索引[4],以保证长滚动列表 import UIKit class DetailViewController: UIViewController { var scrollView: UIScroll

我有一个UIScrollView,其中添加了一个子视图的UIScrollView。子视图是不可滚动的,但是如果我添加按钮而不是UIView,堆栈视图是可滚动的。此代码显示在拆分视图控制器的详细视图中。知道为什么子视图不滚动吗? 顺便说一句,detailItem将携带索引,但目前我正在硬编码索引[4],以保证长滚动列表

import UIKit

class DetailViewController: UIViewController {

    var scrollView: UIScrollView!
    var stackView: UIStackView!

    var detailItem: AnyObject? {
        didSet {
        // Update the view.
     //   self.configureView()
     //   print("didSet: configureView")
        }
    }

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView = UIScrollView()
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(scrollView)

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


    stackView = UIStackView()
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.axis = .Vertical

    scrollView.addSubview(stackView)

    scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[stackView]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
    scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[stackView]", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
 /*
    for _ in 1 ..< 100 {
        let vw = UIButton(type: UIButtonType.System)
        vw.setTitle("Button", forState: .Normal)
        stackView.addArrangedSubview(vw)
    }
 */

    let selectedGroup: Group = GroupArray[4]

    let descriptorsArray = selectedGroup.descriptorsArray

    for descriptor in descriptorsArray {
        // Create a subview for each descriptor

        let subView = UIView()
        subView.frame = CGRectMake(0 , 0, self.view.frame.width-10, 50)
        subView.backgroundColor = UIColor.yellowColor()

        subView.heightAnchor.constraintEqualToConstant(50.0).active = true
        // Create a label for Descriptor subview
        let label = UILabel(frame: CGRectMake(20, 0, 200, 46))
        label.text = descriptor.name
        label.font = UIFont.boldSystemFontOfSize(22.0)
        label.textAlignment = .Left
        label.textColor = UIColor.brownColor()

        subView.addSubview(label)
        // Create a button for Checkbox

        stackView.addArrangedSubview(subView)

     }
}
导入UIKit
类DetailViewController:UIViewController{
var scrollView:UIScrollView!
var stackView:UIStackView!
var detailItem:任何对象{
迪塞特{
//更新视图。
//self.configureView()
//打印(“didSet:configureView”)
}
}
重写func viewDidLoad(){
super.viewDidLoad()
scrollView=UIScrollView()
scrollView.TranslatesAutoResizezingMaskintoConstraints=false
view.addSubview(滚动视图)
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“H:|[scrollView]|”,选项:.AlignAllCenterX,度量值:nil,视图:[“scrollView”:scrollView]))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“V:|[scrollView]|”,选项:.AlignAllCenterX,度量值:nil,视图:[“scrollView”:scrollView]))
stackView=UIStackView()
stackView.TranslatesAutoResizezingMaskintoConstraints=false
stackView.axis=.Vertical
scrollView.addSubview(stackView)
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“H:|[stackView]|”,选项:NSLayoutFormatOptions.AlignAllCenterX,指标:零,视图:[“stackView”:stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“V:|[stackView]”),选项:NSLayoutFormatOptions.AlignAllCenterX,指标:零,视图:[“stackView”:stackView]))
/*
对于uu1..<100{
设vw=UIButton(类型:UIButtonType.System)
vw.setTitle(“按钮”,用于状态:。正常)
stackView.addArrangedSubview(vw)
}
*/
让selectedGroup:Group=GroupArray[4]
让DescriptorArray=selectedGroup.DescriptorArray
用于描述符数组中的描述符{
//为每个描述符创建一个子视图
让子视图=UIView()
subView.frame=CGRectMake(0,0,self.view.frame.width-10,50)
subView.backgroundColor=UIColor.yellowColor()
subView.heightAnchor.constraintEqualToConstant(50.0).active=true
//为描述符子视图创建标签
let label=UILabel(帧:CGRectMake(20,02000,46))
label.text=descriptor.name
label.font=UIFont.boldSystemFontOfSize(22.0)
label.textAlignment=.Left
label.textColor=UIColor.brownColor()
子视图。添加子视图(标签)
//为复选框创建一个按钮
stackView.addArrangedSubview(子视图)
}
}

}您缺少一个约束:

scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[stackView]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[stackView]", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))

您忘记将堆栈视图固定到滚动视图的底部。否则,滚动视图就没有
contentSize
。没有
contentSize
,就不能滚动。

@Jolly您可以尝试ScrollableStackView

它是Objective-C和Swift兼容的库。可通过以下途径获得

示例代码

import ScrollableStackView

var scrollable = ScrollableStackView(frame: view.frame)
view.addSubview(scrollable)

// add your views with 
let rectangle = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 55))
rectangle.backgroundColor = UIColor.blue
scrollable.stackView.addArrangedSubview(rectangle)
// ...

谢谢,马特。你让我想起了一些我以前尝试过的内容,但它不起作用,因为以前我没有适当的限制,我想。我添加了这一行,它会滚动:
scrollView.contentSize=CGSizeMake(4001000)