【发布时间】:2019-08-13 20:41:03
【问题描述】:
编辑我的 UIScrollView 大小后,页面控件停止工作。
您可以看到只有 3 张幻灯片。但是 (1) 页面控制没有反映我在哪张幻灯片上,(2) 我只能从幻灯片 1 滚动到幻灯片 3。
这是我的代码:
func setupSlideScrollView(slides : [Slide]) {
scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 154)
scrollView.contentSize = CGSize(width: 188 * CGFloat(slides.count) + CGFloat((slides.count - 1) * 10), height: 153)
scrollView.isPagingEnabled = true
var lastCellMaxX: CGFloat = 0
let constantSpacingBetweenCell: CGFloat = 10
for i in 0 ..< slides.count {
slides[i].frame = CGRect(x: lastCellMaxX, y: 0, width: 220, height: 153)
scrollView.addSubview(slides[i])
lastCellMaxX += 188 + constantSpacingBetweenCell
}
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let pageIndex = round(scrollView.contentOffset.x/scrollView.frame.size.width)
pageControl.currentPage = Int(pageIndex)
}
【问题讨论】:
-
您没有显示足够的代码。何时调用
setupSlideScrollView?它有很大的不同。此外,您的“魔术数字”(154、188、220、153)是难闻的气味。 -
1.
setupSlideScrollView在viewDidLoad内。它在我的 API 调用内部调用(我获取天气数据,然后创建幻灯片,全部在 viewDidLoad 内部)。 2. 我确信这些神奇的数字可以改进(我是 Swift 新手)。有什么更好的选择? -
"setupSlideScrollView is inside of viewDidLoad" 这可能是问题所在,因为此时您的视图还没有真正的
frame,所以您的view.frame.width会给您的滚动视图提供错误的宽度. -
谢谢@matt!你是对的,现在 Page 控件反映了更改......但我有一个最后一个错误。当我滚动幻灯片时,它直接从幻灯片 1 转到幻灯片 3。我没有更改我的代码(除了使用下面的 Mocha 解决方案)。那么可能是什么错误?
标签: ios swift xcode uiscrollview