在调整滚动视图大小时滚动到滚动视图页面
Posted
技术标签:
【中文标题】在调整滚动视图大小时滚动到滚动视图页面【英文标题】:Scroll to scrollview page while scrollview is being resized 【发布时间】:2015-06-03 00:55:34 【问题描述】:我有一个禁用分页的滚动视图。它有许多子视图。它们中的每一个都有一个宽度约束,并且彼此和滚动视图都受到约束,因此当子视图增长时,滚动视图内容区域也会增长。
当点击子视图时,我运行以下代码:
var page = subView.tag
for scrollViewSubViewWidthConstraint in scrollViewSubViewWidthConstraints
//this results in the subview being larger than it previously was
scrollViewSubViewWidthConstraint.constant = self.view.frame.width
UIView.animateWithDuration(0.35)
self.view.layoutIfNeeded()
scrollView.pagingEnabled = false
scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: true)
此代码旨在:
-
调整子视图的大小,使其与“页面”的宽度相同
在滚动视图上启用分页
平滑滚动到正确的页面
不幸的是,它不仅没有滚动到正确的页面,似乎是因为它试图在更新约束时计算滚动量,而且它以一种不吸引人的时尚动画方式这样做。
如果我将我的代码更改为这个(剪切动画)它仍然不起作用:
self.view.layoutIfNeeded()
scrollView.pagingEnabled = true
scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: false)
这行得通,但它不是动画的,而且它被延迟了 - 两者都不好。
self.view.layoutIfNeeded()
UIHelper.delay(0.1, closure: () -> () in //helper function that executes code after a given delay...
self.scrollView.pagingEnabled = true
scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: true)
)
【问题讨论】:
【参考方案1】:也许解决方法可以将 contentOffset 设置为动画块
UIView.animateWithDuration(0.35)
self.view.layoutIfNeeded()
scrollView.setContentOffset(CGPoint(x: self.view.frame.width * CGFloat(page), y: 0), animated: false)
【讨论】:
以上是关于在调整滚动视图大小时滚动到滚动视图页面的主要内容,如果未能解决你的问题,请参考以下文章
调整滚动视图框架的大小时,UIScrollView 子视图的大小调整不正确
在 UIScrollView 中调整视图大小后,滚动视图不知道它改变了