Swift - UIScrollView不滚动

时间:2015-01-26 04:17:31

标签: ios swift uiscrollview xcode6

我的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)
}

请指教。谢谢。

14 个答案:

答案 0 :(得分:40)

您需要设置frame的{​​{1}},使其小于UIScrollView。否则,它不会滚动。

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

答案 1 :(得分:16)

如果您已经按照教程进行了很多时间代码是正确的,但许多初学者不知道的是,scrollView不会正常通过模拟器滚动。只有当您按下鼠标垫并同时滚动时才会滚动。许多有经验的XCode / Swift / Obj-C用户非常习惯这样做,所以他们不知道初学者可能会忽视它。 Ciao: - )

@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)
}

只要您执行我上面所说的

,此代码就可以正常运行

答案 2 :(得分:10)

Swift 3.0版本

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

答案 3 :(得分:6)

如果您使用自动版式,

在适用于我的 viewdidAppear 中设置内容大小。

覆盖func viewDidAppear(_动画:布尔){

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

}

答案 4 :(得分:5)

如果您正在使用autolayout,那么contentSize属性将停止工作,它将尝试从约束中推断内容大小。如果是这种情况,那么您的问题可能是您没有为内容视图定义必要的约束,以便scrollview可以推断内容大小。 您应该将内容视图的约束定义到滚动视图的顶部和底部边缘。

答案 5 :(得分:2)

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

let scrollView: UIView = UIView(frame: CGRectMake(0, 0, 400, 2300))

tableView.tableHeaderView = scrollView

答案 6 :(得分:2)

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

答案 7 :(得分:1)

对我有用。在尺寸检查器中 布局=将蒙版转换为约束。 自动调整大小=全部点击。

enter image description here

答案 8 :(得分:0)

由于您的代码非常合理,视图似乎可能因为两个原因而向下移动。

  • 第一个原因,您没有看到滚动指示器
  • 第二个原因,视图中没有显示

第二个原因还不足以说你的视图没有滚动但是如果你没有看到滚动指示器,那么你可能会认为视图实际上并没有滚动。

我在故事板中未设置约束时发生的第一个原因,特别是如果故事板中的视图控制器大小设置为“任何”。滚动视图将比模拟或真实设备的屏幕宽,因此滚动指示器将位于可见屏幕之外。

答案 9 :(得分:0)

我遇到了这个问题,在我解决之前找不到答案。我在普通视图中有一个滚动视图,一旦用“滚动视图”替换“视图”,它就滚动得很好。只是因为任何人绊倒了。

我不确定那是否意味着阻止它工作,因为我很缺乏经验,但这似乎是我的解决方案。希望它可以帮到某人。

答案 10 :(得分:0)

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

从代码中添加了一些view-elements到stackview。 它不会滚动。

通过将stackview的userInteractionEnabled设置为false来解决。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

FWIW,我发现我需要从上面使用sathish的解决方案,尽管它不足以单独对viewDidAppear进行干预。相反,我必须对每个新的内容分配进行调整:

func display(pattern: Pattern) {
    let text : NSAttributedString = pattern.body()
    patternTextView.attributedText = text

    // Set the size of the view. Autolayout seems to get in the way of
    // a correct size calculation
    patternTextView.contentSize = CGSize(width: 348, height: 620)
}

清单常量(是的,我知道,yuk,但在这里使它更容易理解)来自自动布局规范。

答案 13 :(得分:0)

如果您使用的是Storyboard

  1. 将“内容”视图放入UIScrollView
  2. 在滚动视图中添加topbottomleftright约束
  3. 添加相等的heightswidths约束
  4. 对于垂直滚动,将Equal Heights Constraint优先级设置为250。对于水平滚动,将Equal Widths Constraint的优先级设置为250