UIScrollView无法在Swift中滚动

问题描述 投票:33回答:12

我的UIScrollView不会向下滚动。我不知道为什么我已经关注了有关此问题的Apple文档。

@IBOutlet weak var scroller: UIScrollView!

    override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

}

override func viewDidLayoutSubviews() {
    scroller.scrollEnabled = true
    // Do any additional setup after loading the view
    scroller.contentSize = CGSizeMake(400, 2300)
}
ios swift uiscrollview xcode6
12个回答
42
投票

您需要设置frameUIScrollView,使其小于contentsize。否则,它将不会滚动。

此外,我建议您将scroller.contentSize = CGSizeMake(400, 2300)添加到viewDidLoad方法中。


0
投票

我对此有疑问,直到我解决后才能为我找到答案。我在普通视图中有一个滚动视图,一旦我用“滚动视图”替换了“视图”,它就会很好地滚动。以防万一有人偶然发现。


0
投票

就我而言,我在UIScrollView中使用了UIStackView。


0
投票

FWIW,我发现我需要从上方使用Sathish的解决方案,尽管它不足以单独影响viewDidAppear。我不得不对每个新的内容分配进行调整:


21
投票

很多时候,如果您遵循了教程,代码是正确的,但是许多初学者不知道的是,scrollView不会在模拟器中正常滚动。假定仅当您按下鼠标垫并同时滚动时才滚动。许多经验丰富的XCode / Swift / Obj-C用户都习惯这样做,因此他们不知道初学者怎么可能会忽略它。巧:-)

@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(scrollView)
// Do any additional setup after the view
}

override func viewWillLayoutSubviews(){
super.viewWillLayoutSubviews()
scrollView.contentSize = CGSize(width: 375, height: 800)
}

只要您照我说的做,这段代码就可以很好地工作


11
投票

Swift 3.0版本

scroller.contentSize = CGSize(width: scroller.contentSize.width, height: 2000)

8
投票

如果使用自动版式,则>

在对我有用的viewdidAppear

中设置内容大小。

覆盖func viewDidAppear(_动画:Bool){

    scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height+300)

}

5
投票

如果使用自动布局,则contentSize属性将停止工作,它将尝试根据约束条件推断内容的大小。如果真是这样,那么您的问题可能是您没有为内容视图定义必要的约束,以便滚动视图可以推断内容的大小。您应该在滚动视图的顶部和底部边缘定义内容视图的约束。


5
投票

不要给滚动视图指定高度,而总是将第一个子视图的顶部赋予scrollview,将最后一个子视图的底部赋予scrollview。通过这种方式,滚动视图将根据所包含子视图的大小自动增长。无需为滚动视图提供contentSize。无论大小iPhone均适用。


2
投票

问题可能是您的scrollView不像上述那样知道它的contentSize,但是此修复比上述答案更容易。就像Carlos所说的那样,但我会详细说明。如果要使scrollView垂直滚动(上下滚动),请使位于scrollView层次结构中的contentView的宽度等于ViewController的宽度,并为其设置一个适用于您的项目的高度约束,即700。反之(水平)使高度等于ViewController,使宽度等于对您的项目有用的较大数字。


1
投票

我不知道这是一个好的解决方案,但是您可以尝试将headerview设置为空的UITableView。


0
投票

由于您的代码完美无缺,因此视图似乎没有向下移动的两个原因。

© www.soinside.com 2019 - 2024. All rights reserved.