我在View中有一个Scrollview。我想使用功能scrollViewDidScroll来检查和更新箭头(左至右)。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"Did scroll");
[self updateButtons];
}
当我向左或向右滚动时,似乎不会调用scrollViewDidScroll。我搜索了所有内容,但没有找到解决方案。
希望有人有解决方案。
典型的错误是“一个人不能简单地设置视图的委托”。您可能忘记的是
theScrollView.delegate = self;
我也有这种“症状”,并因此失去了大约2个小时的生命。我显然已经正确设置了代理...但是我不知道在滚动视图上设置contentSize属性。 -.-
如果您未设置该属性,则滚动视图不会认为有任何滚动内容,因此不会触发预期的滚动视图方法。
实际上在大多数情况下有帮助:
scrollView.delegate = self
但是!如果您有一个UITableView
或UICollectionView
的实例,并且几乎将某个实例分配为UITableViewDelegate
/ UICollectionViewDelegate
,而您想使用的实例与UIScrollViewDelegate
不同,请执行此操作(例如UITableView
的示例) :
(taleView as UIScrollView).delegate = someDelegate
并确保someDelegate
符合UIScrollViewDelegate
协议。
我的意思的更详细的示例:
class MyScreenViewController: UIViewController {
@IBOutlet weak var tableView: TableView!
private let tvDelegate = MyScreenTableViewDelegate()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = tvDelegate
(tableView as UIScrollView).delegate = self
}
}
extension MyScreenViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// invoke well and does not affect `UITableViewDelegate`
}
}