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)
}
您需要设置 UIScrollView
的 frame
,使其小于 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
:
- 将您的内容视图放入
UIScrollView
- 为滚动视图添加
top
、bottom
、left
和 right
约束
- 添加相等的
heights
和 widths
约束条件
- 对于垂直滚动,将
Equal Heights Constraint
优先级设置为 250
。对于水平滚动,将 Equal Widths Constraint
优先级设置为 250
我的 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)
}
您需要设置 UIScrollView
的 frame
,使其小于 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
:
- 将您的内容视图放入
UIScrollView
- 为滚动视图添加
top
、bottom
、left
和right
约束 - 添加相等的
heights
和widths
约束条件 - 对于垂直滚动,将
Equal Heights Constraint
优先级设置为250
。对于水平滚动,将Equal Widths Constraint
优先级设置为250