【问题标题】:UIScrollView not scrolling in SwiftUIScrollView 在 Swift 中不滚动
【发布时间】:2015-03-24 13:09:37
【问题描述】:

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

【问题讨论】:

  • 滚动视图的框架是什么?在 viewDidLayoutSubviews 中添加 println 语句来查找。
  • 我在 UIWebView 中发现了类似的问题。我相信您目前正在您的 PC 上运行测试。无论您做什么(据我所知),您都无法使其在 PC 上滚动。如果您将具有相同代码的相同应用程序上传到设备,则滚动将起作用。希望这会有所帮助!

标签: ios swift uiscrollview xcode6


【解决方案1】:

您需要将UIScrollView 的frame 设置为小于contentSize。否则,它不会滚动。

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

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

【讨论】:

  • 斯威夫特 3:scroller.contentSize = CGSize(width: yourWidth, height: yourHeight)
  • 如果您在使用 swift 5.0+ 时遇到问题,可以查看freecodecamp.org/news/… 文章..
  • 谢谢。这很有用,尽管我使用 Storyboard。我删除了框架上的违规限制,这解决了我的问题。
【解决方案2】:

如果您按照教程进行操作,很多时候代码都是正确的,但许多初学者不知道的是,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)
}

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

【讨论】:

  • viewWillLayoutSubviews() 对我有用,谢谢
【解决方案3】:

如果您使用的是自动布局

在适合我的 viewDidAppear 中设置内容大小。

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

【讨论】:

  • 是的,这是我们使用故事板时的解决方案。
  • 为我工作...太棒了
【解决方案4】:

不要给滚动视图固定高度,总是给滚动视图第一个子视图的顶部和最后一个子视图的底部给滚动视图。通过这种方式,滚动视图将根据包含的子视图的大小自动增长。无需为滚动视图指定 contentSize。它适用于小型和大型 iPhone。

【讨论】:

  • 一个很棒的答案。非常感谢... :)
【解决方案5】:

Swift 3.0 版本

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

【讨论】:

    【解决方案6】:

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

    【讨论】:

    • 我很清楚你在说什么。只是链接?没有解决办法?
    • 我确实提出了一个解决方案,即为内容视图的每个边缘添加一个约束到滚动视图的相应边缘,在链接中它还涉及该解决方案并为您提供更多详细信息和还参考了苹果的相关文档,但这仅适用于您使用自动布局的情况,如果没有,则问题出在其他地方
    • 链接不存在了。我有同样的问题,我正在使用自动布局。我确保我的内容视图(我猜你的意思是滚动视图的智利视图)与滚动视图的大小相同。当键盘打开时,它覆盖了一半的屏幕,但我无法滚动。
    • 这是一个绝对的救星。我认为这是初学者的常见问题,应该得到更多的支持。
    【解决方案7】:

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

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

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

    【讨论】:

      【解决方案8】:

      如果您使用的是Storyboard:

      1. 将您的内容视图放入UIScrollView
      2. 在滚动视图中添加 top、bottom、left 和 right 约束
      3. 添加相等的heights 和widths 约束
      4. 对于垂直滚动,将Equal Heights Constraint 优先级设置为250。对于水平滚动,将Equal Widths Constraint 优先级设置为250

      【讨论】:

        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            它对我有用。尺寸检查器 布局 = 将掩码转换为约束。 自动调整大小 = 所有点击。

            【讨论】:

              【解决方案12】:

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

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

              【讨论】:

                猜你喜欢
                • 2018-02-09
                • 1970-01-01
                • 1970-01-01
                • 2014-10-10
                • 2015-05-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多