Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 滚动视图不与子视图一起滚动_Ios_Swift_Uiscrollview - Fatal编程技术网

Ios 滚动视图不与子视图一起滚动

Ios 滚动视图不与子视图一起滚动,ios,swift,uiscrollview,Ios,Swift,Uiscrollview,我无法让我的UIScrollView滚动。 这是我的密码: import UIKit class ViewController: UIViewController, UIScrollViewDelegate { var scrollView = UIScrollView() override func viewDidLoad() { super.viewDidLoad() scrollView = UIScrollView(frame :

我无法让我的
UIScrollView
滚动。 这是我的密码:

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    var scrollView = UIScrollView()


    override func viewDidLoad() {
        super.viewDidLoad()

        scrollView = UIScrollView(frame : CGRect ( x:0,y:0,width:UIScreen.main.bounds.width,height:UIScreen.main.bounds.height))
        scrollview.delegate = self
        view.addSubview(scrollView)

        for i in 0...14 {
            let numLabel = UILabel(frame : CGRect( x : 0 , y : 10+(i*40) , width : UIScreen.main.bounds.width - 20 : height : 40))
            numlabel.text = "\(i)"
            scrollView.addSubview(numLabel)
        }

    }

}

这会使视图显示,但不会滚动。

滚动视图会滚动到其内容大小。 无论何时向滚动视图添加子视图,都应确保滚动视图的内容大小足以适应新视图。 在你的情况下,你没有注意到这一点。 理想情况下,无论何时添加子视图,都应该相应地调整滚动视图内容大小的高度。 在您的情况下,将所有标签添加到滚动视图后,即在for循环后添加以下行

self.scrollView.contentSize = CGSize(width:self.scrollView.bounds.size.width,height:10+(15‌​*40))
或者在添加标签后的for循环中,可以执行以下操作

self.scrollView.contentSize = CGSize(width:self.scrollView.bounds.size.width,height:10+((i+1)*40))

第二种方法更好。因为如果你在滚动视图中添加更多的标签,它就会解决这个问题。再次强调,这是一条经验法则,每当将视图添加到滚动视图时,请确保其内容大小已更新,以适合所有子视图

虽然您可以手动设置
contentSize
,但我不建议您这样做

相反,我会对滚动视图的子视图使用约束。自动布局引擎将自动为您计算
contentSize
。如果设备旋转,它还将负责调整一切

我还建议使用堆栈视图,您不必为标签手动设置框架,也不必在它们之间设置约束

因此,您可以执行以下操作:

var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()

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

    let stackView = UIStackView()
    stackView.axis = .vertical
    stackView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.addSubview(stackView)

    for i in 0 ... 140 {
        let numLabel = UILabel()
        numLabel.translatesAutoresizingMaskIntoConstraints = false
        numLabel.text = "\(i)"
        numLabel.font = .preferredFont(forTextStyle: .body)
        stackView.addArrangedSubview(numLabel)
    }

    NSLayoutConstraint.activate([
        scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        scrollView.topAnchor.constraint(equalTo: view.topAnchor),
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),

        stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
        stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
        stackView.topAnchor.constraint(equalTo: scrollView.topAnchor),
        stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor)
    ])
}
注意使用
UIFont.preferredFont(forTextStyle:.body)
来欣赏动态文本。这意味着,如果用户在其设置中指定了较大的字体,则此应用程序将自动显示较大的字体。但更重要的是,我们不必计算该字体的标签大小。约束和堆栈视图负责标签的框架以及滚动视图的
contentSize



为了完整性起见,值得注意的是,替代方法是使用
UITableView
UICollectionView
。这是一种在滚动视图中查看数据的可扩展、内存有效的方法。它超出了这个问题的范围,但是在考虑创建大滚动视图时值得记住。

尝试设置内容大小,调整代码大小:<代码> Self.ScRelVIEW.CordNeths= CGSIZE(宽度:Surviv:ScLabVIEW .Queal.大小,宽度,高度:10 +(15×40))< /代码>