Ios 以编程方式创建UILabel堆栈
我在胡思乱想一个通过编程创建的滚动视图和堆栈视图的示例,我决定尝试并将UIButtons更改为UILabels。我将for循环中的代码替换为以下代码:Ios 以编程方式创建UILabel堆栈,ios,swift,uikit,Ios,Swift,Uikit,我在胡思乱想一个通过编程创建的滚动视图和堆栈视图的示例,我决定尝试并将UIButtons更改为UILabels。我将for循环中的代码替换为以下代码: let label = UILabel() label.text = "Label" stackView.addArrangedSubview(label) 但是,当我重新运行应用程序时,我发现无法再滚动滚动滚动视图。调试之后,我发现堆栈视图的框架的宽度和高度都为零,我认为这是问题的根源。我一直无法理解为什么堆栈视图没有宽度或高度,或者如何使滚
let label = UILabel()
label.text = "Label"
stackView.addArrangedSubview(label)
但是,当我重新运行应用程序时,我发现无法再滚动滚动滚动视图。调试之后,我发现堆栈视图的框架的宽度和高度都为零,我认为这是问题的根源。我一直无法理解为什么堆栈视图没有宽度或高度,或者如何使滚动视图再次滚动
这是完整视图控制器,我对其进行了修改,以将其编译为Swift 4,使用UILabel并打印帧大小:
import UIKit
class ViewController: UIViewController {
var scrollView: UIScrollView!
var stackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[scrollView]|", options: .alignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[scrollView]|", options: .alignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .vertical
scrollView.addSubview(stackView)
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[stackView]|", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["stackView": stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[stackView]", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["stackView": stackView]))
for _ in 1 ..< 100 {
let label = UILabel()
label.text = "Label"
label.sizeToFit()
stackView.addArrangedSubview(label)
// let vw = UIButton(type: UIButtonType.system)
// vw.setTitle("Button", for: .normal)
// stackView.addArrangedSubview(vw)
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.contentSize = CGSize(width: stackView.frame.width, height: stackView.frame.height)
print("stack view frame: \(stackView.frame)")
}
}
你应该:
•通过更新上一个VFL约束,将stackView的底部固定到scrollView的内容底部边缘,如下所示:
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[stackView]|", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["stackView": stackView]))
•避免将自动布局与“手动”布局混合,并删除该行:
scrollView.contentSize = CGSize(width: stackView.frame.width, height: stackView.frame.height)
我踢自己;那根丢失的管子就是一切。