我的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)
}
您需要设置frame
的UIScrollView
,使其小于contentsize
。否则,它将不会滚动。
此外,我建议您将scroller.contentSize = CGSizeMake(400, 2300)
添加到viewDidLoad
方法中。
我对此有疑问,直到我解决后才能为我找到答案。我在普通视图中有一个滚动视图,一旦我用“滚动视图”替换了“视图”,它就会很好地滚动。以防万一有人偶然发现。
就我而言,我在UIScrollView中使用了UIStackView。
FWIW,我发现我需要从上方使用Sathish的解决方案,尽管它不足以单独影响viewDidAppear
。我不得不对每个新的内容分配进行调整:
很多时候,如果您遵循了教程,代码是正确的,但是许多初学者不知道的是,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)
}
只要您照我说的做,这段代码就可以很好地工作
Swift 3.0版本
scroller.contentSize = CGSize(width: scroller.contentSize.width, height: 2000)
如果使用自动版式,则>
在对我有用的viewdidAppear
中设置内容大小。覆盖func viewDidAppear(_动画:Bool){
scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height+300)
}
如果使用自动布局,则contentSize属性将停止工作,它将尝试根据约束条件推断内容的大小。如果真是这样,那么您的问题可能是您没有为内容视图定义必要的约束,以便滚动视图可以推断内容的大小。您应该在滚动视图的顶部和底部边缘定义内容视图的约束。
不要给滚动视图指定高度,而总是将第一个子视图的顶部赋予scrollview,将最后一个子视图的底部赋予scrollview。通过这种方式,滚动视图将根据所包含子视图的大小自动增长。无需为滚动视图提供contentSize。无论大小iPhone均适用。
问题可能是您的scrollView不像上述那样知道它的contentSize,但是此修复比上述答案更容易。就像Carlos所说的那样,但我会详细说明。如果要使scrollView垂直滚动(上下滚动),请使位于scrollView层次结构中的contentView的宽度等于ViewController的宽度,并为其设置一个适用于您的项目的高度约束,即700。反之(水平)使高度等于ViewController,使宽度等于对您的项目有用的较大数字。
我不知道这是一个好的解决方案,但是您可以尝试将headerview设置为空的UITableView。
由于您的代码完美无缺,因此视图似乎没有向下移动的两个原因。