UIScrollView 不能水平滚动
Posted
技术标签:
【中文标题】UIScrollView 不能水平滚动【英文标题】:UIScrollView cannot scroll horizontally 【发布时间】:2017-03-08 14:10:52 【问题描述】:我在 UIViewController 中有一个 UIScrollView,我希望它可以水平滚动。我通过循环以编程方式将按钮添加到 ScrollView。在循环之后,我将myScrollView.contentSize.width
设置为buttonWidth * numberOfButtons
。我还仔细检查以确保 contentSize 大于滚动视图的框架(在这种情况下,滚动视图的宽度为 375)。
let numberOfButton = 7
for index in 0..<numberOfButton
let button = UIButton()
let frame = CGRect(x: 80 + (index * 80), y: 6, width: 60, height: 32)
button.setTitle("Button" + String(index), forState: .Normal)
button.frame = frame
button.titleLabel?.font = UIFont(name: "Museo Sans", size: 16)
button.setTitleColor(UIColor.blueColor(), forState: .Normal)
myScrollView.addSubview(button)
myScrollView.contentSize = CGSize(width: 100*numberOfButtons, height: 42)
当我运行代码时,它只出现在 Button3(有 7 个按钮)上,我无法滚动到最后。但是,当我设置myScrollView.bounces = true
时,我可以拖动滚动视图并查看其他按钮,但它会弹回原始状态。任何帮助将不胜感激。
【问题讨论】:
IMO 你应该使用collectionview 代替吗?另外,在此之后 myScrollView.contentSize 的值是多少。能打印出来看看吗 myScrollView.frame (0.0, 60.0, 375.0, 42.0) / myScrollView.contentSize (700.0, 42.0) 内容似乎还可以,我唯一能想到的可能是启用滚动。添加 myScrollView.isScrollEnabled = true 嗯,实际上它可以滚动,但只是很小。即使我还有 3 或 4 个按钮,我也无法滚动到它们。 啊,好吧,让我直说吧,你想正确显示 6 个按钮。当您前进时 【参考方案1】:我认为您的问题是在第一个按钮上设置 X 值。我刚刚尝试了这段代码,它工作正常
let numberOfButtons = 7
for index in 0..<numberOfButtons
let button = UIButton()
let frame = CGRect(x: 8 + (index * 96), y: 6, width: 80, height: 32)
button.setTitle("Button \(index)", for: .normal)
button.frame = frame
button.titleLabel?.font = UIFont(name: "Museo Sans", size: 16)
button.setTitleColor(UIColor.blue, for: .normal)
myScrollView.addSubview(button)
myScrollView.contentSize = CGSize(width: 100*numberOfButton, height: 42)
【讨论】:
我已经解决了这个问题。发生这种情况是因为我在 XIB 中有一个默认按钮(只是第一个按钮,其他按钮是动态创建的),并且它对父视图有约束,这就是为什么我不能滚动出第一个按钮的原因。我已阅读您的评论和解决方案。尽管他们没有回答问题,但他们给了我解决这个问题的线索。非常感谢。 啊,我会尽量避免同时拥有静态和动态视图。它可能会变得非常混乱。【参考方案2】:改变这个
tagBar.contentSize = CGSize(width: 100*7, height: 42)
到
myScrollView.contentSize = CGSize(width: 100*7, height: 42)
【讨论】:
其实只是打字错误。我刚刚编辑了我的代码。问题依旧【参考方案3】:Rajeshkumar R 给你的答案,或者更好的使用约束。您可以在myScrollView
的左侧和第一个按钮的左侧设置一个约束(“前导空格”约束),然后在每个按钮和前一个按钮之间设置一个前导空格约束,当你完成循环时,一个尾随空格你最后一个按钮到myScrollView
。
这样您就不必自己计算 contentSize。它也更具可扩展性(例如,如果您有不同大小的按钮,则必须知道每个宽度,将它们全部相加,然后将元素之间的边距以及第一个和最后一个与 scrollView 之间的边距相加......)。
【讨论】:
以上是关于UIScrollView 不能水平滚动的主要内容,如果未能解决你的问题,请参考以下文章
用于水平滚动的 UIScrollView 内的 UITableView 无法按预期工作
自动滚动 UIScrollView 以适应原生 iOS Mail.app 中的内容
水平 UIScrollView 中的多个垂直滚动 UIScrollView
使用按钮检测水平滚动 UIScrollView 上的垂直滚动
水平 UIScrollView 内部有垂直 UIScrollViews - 滚动外部水平视图时如何防止滚动内部滚动视图?