通过点击状态栏滚动到顶部 TableView 不起作用(有许多子视图)SWIFT
Posted
技术标签:
【中文标题】通过点击状态栏滚动到顶部 TableView 不起作用(有许多子视图)SWIFT【英文标题】:Scroll to top TableView by tapping status bar not work (with many subviews) SWIFT 【发布时间】:2016-02-05 00:40:30 【问题描述】:我有很多视图,每个视图都有很多子视图。 我试图为每个子视图指定
scrollsToTop = false
但是当我按下状态栏时,我的TableView
没有滚动到顶部。
我想我错过了一些观点......
我知道有一个类似的帖子,但它没有回答 (UITableView scroll to top when tapping status bar at top of the screen)
所以我决定实现这个功能:
override func viewDidLoad()
super.viewDidLoad()
checkForScrollViewInView(self.view)
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.scrollsToTop = true
func checkForScrollViewInView(view:UIView)
for subview in view.subviews as [UIView]
if subview.isKindOfClass(UITextView)
(subview as! UITextView).scrollsToTop = false
if subview.isKindOfClass(UIScrollView)
(subview as! UIScrollView).scrollsToTop = false
if subview.isKindOfClass(UITableView)
(subview as! UITableView).scrollsToTop = false
if (subview.subviews.count > 0)
self.checkForScrollViewInView(subview)
但它也不起作用。我不知道我错过了什么。
【问题讨论】:
【参考方案1】:您可能会遇到 2 个问题:
-
您有多个
UIScrollView
实例。您应该为父 UIScrollView
或从它继承的对象(如 UITableView
或 UICollectionView
)禁用 scrollsToTop
(例如 viewDidLoad
中的 self.collectionView?.scrollsToTop = false
)。
来自苹果scrollViewShouldScrollToTop(_:)
如果委托未实现此方法,则假定为 true。要使滚动到顶部手势(点击状态栏)生效,UIScrollView 的 scrollsToTop 属性必须设置为 YES。
-
如果您的层次结构是高度自定义的方法
scrollViewShouldScrollToTop
将不会被调用。你应该检查为什么会发生。否则你将不得不做一些肮脏的工作:添加一些手势并处理它们。
有趣的链接:
Scroll to top of UITableView by tapping status bar
Why doesn't UIScrollView/UITableview respond to taps on the status bar, and scroll to the top?
https://developer.apple.com/library/prerelease/ios//documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIScrollViewDelegate/scrollViewShouldScrollToTop:
【讨论】:
【参考方案2】:好的,我找到了为什么我的 tableview 不会滚动!
我只在我的表视图的视图控制器的 viewDidLoad 中调用了我的 checkForScrollViewInView() 函数。为了禁用每个子视图的 scrollToTop。
但我忘记了我还有另一个“活动”视图控制器......在我的应用程序中,我有一个左侧菜单,可以打开滑动。在左侧菜单的视图控制器中调用 checkForScrollViewInView() 解决了我的问题。
func checkForScrollViewInView(view:UIView)
for subview in view.subviews as [UIView]
if subview.isKindOfClass(UITextView)
(subview as! UITextView).scrollsToTop = false
if subview.isKindOfClass(UIScrollView)
(subview as! UIScrollView).scrollsToTop = false
if subview.isKindOfClass(UITableView)
(subview as! UITableView).scrollsToTop = false
if (subview.subviews.count > 0)
self.checkForScrollViewInView(subview)
【讨论】:
以上是关于通过点击状态栏滚动到顶部 TableView 不起作用(有许多子视图)SWIFT的主要内容,如果未能解决你的问题,请参考以下文章