从 UIScrollView 禁用水平滚动 Swift
Disabling Horizontal Scrolling from UIScrollView Swift
滚动视图
我有一个 UIScrollView,有约束 left: 0, top: 0, right: 0, bottom: 0
内部滚动视图
在这个 UIScrollView
的顶部是一个 UIImageView
与约束 left: 0, top: 0, right: 0, height: 200
在这下面我有一个 UITextView
约束 left: 0, top: 0, right: 0, bottom: 0
这意味着 UITextView
将根据其内容调整大小,我将 UITextView
的 scrollingEnabled
设置为 false
。
所以,当我 运行 时,它 几乎 完美运行。
一个问题是 UIImageView
比实际屏幕宽度多了大约 10%。因此,启用了水平滚动。
我试过添加这些行
imageView.frame = CGRect(0, 0, screenSize.width, 200)
scrlView.contentSize.width = screenSize.width
但这没有区别。我仍然可以水平滚动,图像视图仍然比实际屏幕宽度多 10%。
请注意,我没有在故事板中设置 imageView 屏幕宽度,只是通过编程设置。
有什么想法吗?
像这样,
Swift 4.0
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.x>0 {
scrollView.contentOffset.x = 0
}
}
并且,您可以设置此 属性:
scrollImg.isDirectionalLockEnabled = true
如果您正在使用故事板和自动版式,那么您应该考虑 ScrollView 如何在带有自动版式的故事板中工作。
考虑以下因素。
在带有约束的滚动视图上添加单个视图
左,右,上,下,高度,宽度,
制作宽高的出口
将您的子视图添加到您在滚动视图中添加的视图
将宽度更新为 screenSize 例如:iPhone5 或 4.
的 320
self.viewWidth = SCREEN_WIDTH;
[self.view updateConstraints];
我将其更改为 returns 0。如果您想关闭滚动条,则根本无需检查。
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
不需要方向锁
func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
这也会阻止滚动视图向前缘滚动。
Swift 4
水平滚动锁定
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 {
scrollView.contentOffset.x = 0
}
}
您可以将 x 更改为 y 以进行垂直滚动。
确保像这样添加 UIScrollViewDelegate:
class MyViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet var scrollView: UIScrollView!
...
}
并为 ScrollView 设置委托
scrollView.delegate = self
您可以使用
func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
不要像其他人提到的那样使用 scrollView.contentOffset.x < 0 或 > 0,因为它只会停止水平滚动到一侧而不是两侧。
滚动视图
我有一个 UIScrollView,有约束 left: 0, top: 0, right: 0, bottom: 0
内部滚动视图
在这个 UIScrollView
的顶部是一个 UIImageView
与约束 left: 0, top: 0, right: 0, height: 200
在这下面我有一个 UITextView
约束 left: 0, top: 0, right: 0, bottom: 0
这意味着 UITextView
将根据其内容调整大小,我将 UITextView
的 scrollingEnabled
设置为 false
。
所以,当我 运行 时,它 几乎 完美运行。
一个问题是 UIImageView
比实际屏幕宽度多了大约 10%。因此,启用了水平滚动。
我试过添加这些行
imageView.frame = CGRect(0, 0, screenSize.width, 200)
scrlView.contentSize.width = screenSize.width
但这没有区别。我仍然可以水平滚动,图像视图仍然比实际屏幕宽度多 10%。
请注意,我没有在故事板中设置 imageView 屏幕宽度,只是通过编程设置。
有什么想法吗?
像这样,
Swift 4.0
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.x>0 {
scrollView.contentOffset.x = 0
}
}
并且,您可以设置此 属性:
scrollImg.isDirectionalLockEnabled = true
如果您正在使用故事板和自动版式,那么您应该考虑 ScrollView 如何在带有自动版式的故事板中工作。
考虑以下因素。
在带有约束的滚动视图上添加单个视图 左,右,上,下,高度,宽度,
制作宽高的出口
将您的子视图添加到您在滚动视图中添加的视图
将宽度更新为 screenSize 例如:iPhone5 或 4.
的 320self.viewWidth = SCREEN_WIDTH;
[self.view updateConstraints];
我将其更改为 returns 0。如果您想关闭滚动条,则根本无需检查。
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
不需要方向锁
func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
这也会阻止滚动视图向前缘滚动。
Swift 4
水平滚动锁定
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 {
scrollView.contentOffset.x = 0
}
}
您可以将 x 更改为 y 以进行垂直滚动。
确保像这样添加 UIScrollViewDelegate:
class MyViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet var scrollView: UIScrollView!
...
}
并为 ScrollView 设置委托
scrollView.delegate = self
您可以使用
func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
不要像其他人提到的那样使用 scrollView.contentOffset.x < 0 或 > 0,因为它只会停止水平滚动到一侧而不是两侧。