使用 UIRefreshControl 在 UITableView 中禁用底部反弹
Posted
技术标签:
【中文标题】使用 UIRefreshControl 在 UITableView 中禁用底部反弹【英文标题】:Disable bottom bounce in UITableView with UIRefreshControl 【发布时间】:2015-10-27 13:24:23 【问题描述】:我想禁用 UITableView 底部反弹,我不能在情节提要中使用标准的“反弹”属性,bcs UIRefreshControl 需要顶部反弹才能工作。所以我试过this solution:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
if (scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height)
[scrollView setContentOffset:CGPointMake(scrollView.contentOffset.x, scrollView.contentSize.height - scrollView.frame.size.height)];
如果内容高度大于屏幕大小,它可以正常工作,但在其他情况下会崩溃:
如上图所示,UIRefreshControl 未被隐藏(如果 UIRefreshControll 被隐藏,则 uitableview 中只有 3 个单元格,底部有空白区域)。我试图通过在我的方法中添加 UIRefreshControl 高度来解决这个问题,但它也没有帮助:
override func scrollViewDidScroll(scrollView: UIScrollView)
if scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height - self.refreshControl!.frame.size.height
scrollView.setContentOffset(CGPoint(x: scrollView.contentOffset.x, y: scrollView.contentSize.height - scrollView.frame.size.height + self.refreshControl!.frame.size.height), animated: false)
我在顶部有空白区域,并且 RefreshControl 停止工作:
我做错了什么?谢谢。
附:我的 viewDidLoad 方法:
override func viewDidLoad()
super.viewDidLoad()
self.refreshControl = UIRefreshControl()
self.refreshControl!.attributedTitle = NSAttributedString(string: "Обновление")
self.refreshControl!.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
self.edgesForExtendedLayout = UIRectEdge.None;
tableView.allowsMultipleSelectionDuringEditing = false;
tableView.tableFooterView = UIView()
// menu button
if self.revealViewController() != nil
menuButton.target = self.revealViewController()
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
【问题讨论】:
【参考方案1】:目前我发现了非常愚蠢的解决方案:
override func scrollViewDidScroll(scrollView: UIScrollView)
if scrollView.contentSize.height > self.view.frame.size.height && scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height
scrollView.setContentOffset(CGPoint(x: scrollView.contentOffset.x, y: scrollView.contentSize.height - scrollView.frame.size.height), animated: false)
我仅在 contentSize.height > self.view.frame.size.height
时禁用反弹,希望有人知道如何做得更好。
【讨论】:
以上是关于使用 UIRefreshControl 在 UITableView 中禁用底部反弹的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIRefreshControl 刷新 UITableView
在 UIViewController 上居中 UIRefreshControl
无法覆盖“UIRefreshControl”类型的可变属性“refreshControl”?具有协变类型“UIRefreshControl”