2016-08-24 10 views
1

サブビューのUIStackViewを追加したUIScrollViewがあります。サブビューはスクロールできませんが、UIViewの代わりにボタンを追加すると、スタックビューはスクロール可能なになります。このコードは、スプリットビューコントローラの詳細ビューに表示されます。なぜサブビューがスクロールしていないのか? 詳細detailItemはインデックスを持ちますが、今は保証された長いスクロール可能なリストのためにインデックス[4]をハードコーディングしています。スクロールしないサブビューのUIStackView

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) 

    } 
} 

}

答えて

1

あなたは制約が不足している:あなたは、スクロールビューの下にスタックビューを固定するために忘れている

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がないと、スクロールしません。

+0

おかげで、マット。前にコンテンツで試したことがあることを思い出させましたが、以前は適切な制約がなかったので動作しませんでした。この行を追加してスクロールします: 'scrollView.contentSize = CGSizeMake(400、1000)' – Jolly

0

@JollyあなたはScrollableStackViewを試すことができます:https://github.com/gurhub/ScrollableStackView

これは、Objective-Cのとスウィフト互換ライブラリです。それはCocoaPodsから利用可能です。

サンプルコード

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) 
// ... 
関連する問題