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