UIScrollView 不滚动 Swift

UIScrollView not scrolling in Swift

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

您需要设置 UIScrollViewframe,使其小于 contentSize。否则,它不会滚动。

此外,我建议您将以下内容添加到您的 viewDidLoad 方法中:

scroller.contentSize = CGSize(width: 400, height: 2300)

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

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

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

tableView.tableHeaderView = scrollView

如果您遵循了教程,很多时候代码是正确的,但许多初学者不知道的是 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)
}

只要你按照我上面所说的去做,这段代码就可以完美地工作

Swift3.0版本

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

如果您使用的是自动布局

viewDidAppear 中设置对我有用的内容大小。

override func viewDidAppear(_ animated: Bool) {
   scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height+300)
}

在我的例子中,我在 UIScrollView 中使用了 UIStackView。

将代码中的一些视图元素添加到堆栈视图。 它不会滚动。

通过将 stackview 的 userInteractionEnabled 设置为 false 来修复它。

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

不要为滚动视图提供固定高度,始终将第一个子视图的顶部提供给滚动视图,将最后一个子视图的底部提供给滚动视图。通过这种方式,滚动视图将根据包含的子视图的大小自动增长。无需为 scrollview.It 提供 contentSize 将适用于小尺寸和大尺寸 iPhone。

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,但在这里更容易理解)来自自动布局规范。

它对我有用。尺码检查员 Layout = 将 Mask 转换为约束。 自动调整大小 = 所有点击。

如果您正在使用 Storyboard:

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