【发布时间】:2013-06-14 13:20:21
【问题描述】:
是否可以在底部反弹UITableView,但不能在顶部反弹?如果是这样,请给我看代码。
【问题讨论】:
标签: ios swift objective-c uitableview uikit
是否可以在底部反弹UITableView,但不能在顶部反弹?如果是这样,请给我看代码。
【问题讨论】:
标签: ios swift objective-c uitableview uikit
我没有更改bounces 属性,而是将其添加到UIScrollViewDelgate 方法中:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y<=0) {
scrollView.contentOffset = CGPointZero;
}
}
【讨论】:
bounds 而不是contentOffset 以避免第二次调用委托,特别是如果scrollViewDidScroll: 中有更多代码。
对于 swift 4
extension YourViewController: UIScrollViewDelegate{
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == tableView {
let a = scrollView.contentOffset
if a.y <= 0 {
scrollView.contentOffset = CGPoint.zero // this is to disable tableview bouncing at top.
}
}
}
}
【讨论】:
应该可以通过观察 UITableview 的 contentOffset 属性来实现。
[_tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL];
。 .并防止偏移量变为负数。
【讨论】:
我也遇到过这个问题,我的解决方法是:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y > 100) {
scrollView.bounces = NO;
}else{
scrollView.bounces = YES;
}
}
我在我的项目中使用了这段代码,它运行良好。
【讨论】:
您可以尝试使用UIScrollViewDelegate 方法来检测拖动方向并适当调整bounces 属性吗?
【讨论】:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
//Check to make sure this only applies to tableview
//and not other scrollviews inside your View/ViewController
if scrollView.superclass == UITableView.self {
//bounce will only be true if contentOffset.y is higher than 100
//I set 100 just to make SURE, but you can set >= 0 too
scrollView.bounces = scrollView.contentOffset.y > 100
}
}
【讨论】:
在 Swift 2.2 中:
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.y <= 0 {
scrollView.contentOffset = CGPointZero
}
}
【讨论】:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y <= 0) {
scrollView.contentOffset = CGPointZero;
scrollView.showsVerticalScrollIndicator = NO;
} else {
scrollView.showsVerticalScrollIndicator = YES;
}
}
@Liron Berger 的解决方案会导致 VerticalScrollIndicator 仍然显示,只需将 showsVerticalScrollIndicator 设置为 NO 即可解决此问题
【讨论】: