UIScrollView是否仅在一个方向上禁用滚动?
我一直找不到这个问题的答案(也许有人一起破解了一个解决方案) 是否可以在UIScrollView中禁用单向滚动?我不是说禁用垂直或水平滚动,而是说只禁用一个方向。例如,在UIScrollView中,我希望能够向下拖动scrollview,但不能向上拖动UIScrollView是否仅在一个方向上禁用滚动?,uiscrollview,Uiscrollview,我一直找不到这个问题的答案(也许有人一起破解了一个解决方案) 是否可以在UIScrollView中禁用单向滚动?我不是说禁用垂直或水平滚动,而是说只禁用一个方向。例如,在UIScrollView中,我希望能够向下拖动scrollview,但不能向上拖动 谢谢你,事实证明一个简单的解决方案是可行且简单的: - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y >
谢谢你,事实证明一个简单的解决方案是可行且简单的:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y > 60) {
[scrollView setContentOffset:CGPointMake(0, 60)];
}
}
另一种选择可能是:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y < 10) {
scrollView.bounces = NO;
}
else scrollView.bounces = YES;
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
if(scrollView.contentOffset.y<10){
scrollView.bounces=否;
}
else scrollView.bounces=是;
}
但请记住,这只适用于ScrollView,因为它的内容比它们的框架更大。这对我适用:
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
scrollView.bounces = YES;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView.contentOffset.y < 0) {
[scrollView setContentOffset:CGPointMake(0, 0)];
scrollView.bounces = NO;
}
if (scrollView.contentOffset.y == 0){
scrollView.bounces = YES;
}
else scrollView.bounces = YES;
}
-(void)ScrollViewDiEndDraging:(UIScrollView*)scrollView将减速:(BOOL)减速{
scrollView.bounces=是;
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
if(scrollView.contentOffset.y<0){
[scrollView setContentOffset:CGPointMake(0,0)];
scrollView.bounces=否;
}
if(scrollView.contentOffset.y==0){
scrollView.bounces=是;
}
else scrollView.bounces=是;
}
幸运的是,我们可以使用scrollRectToVisible来避免限制滚动后出现抖动行为:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y > 60) {
[scrollView setContentOffset:CGPointMake(0, 60)];
CGFloat pageWidth = scrollView.frame.size.width;
CGFloat pageHeight = scrollView.frame.size.height;
CGRect rect = CGRectMake(0, 0, pageWidth, pageHeight);
[scrollView scrollRectToVisible:rect animated:YES];
}
}
上述解决方案会将您重置为零,如果用户意外地垂直滚动,则重置为零。试试这个
- (void)scrollViewDidScroll:(UIScrollView *) scrollView {
if (scrollView.contentOffset.y > 0) {
[scrollView setContentOffset:CGPointMake(scrollView.contentOffset.x, 0)];
}
}
如果将滚动条的contentSize设置为内容的大小,在其中一个方向上,滚动条将在该方向上消失,因为没有任何内容可滚动。而不是使用UIScrollViewDelegate来更正已经错误的contentOffset(这将导致抖动行为)您可能需要考虑子类UISCRelVIEW,而不是重写SETCONTRONTROPENS:
- (void)setContentOffset:(CGPoint)contentOffset {
if (contentOffset.y <= 60) {
[super setContentOffset:contentOffset];
}
}
-(void)setContentOffset:(CGPoint)contentOffset{
如果(contentOffset.y这对我很有效
static CGPoint lastOffset;
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
scrollView.scrollEnabled = YES;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
scrollView.scrollEnabled = YES;
lastOffset = scrollView.contentOffset;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGPoint nowOffset = scrollView.contentOffset;
NSLog(@"delta %f", lastOffset.x - nowOffset.x);
if ((lastOffset.x - nowOffset.x) < 0) {
//uncomment to prevent scroll to left
//scrollView.scrollEnabled = NO;
} else if ((lastOffset.x - nowOffset.x) > 0) {
//uncomment to prevent scroll to right
//scrollView.scrollEnabled = NO;
} else {
scrollView.scrollEnabled = YES;
}
}
静态CGPoint lastOffset;
-(无效)ScrollViewDiEndDecelling:(UIScrollView*)scrollView{
scrollView.scrollEnabled=是;
}
-(无效)scrollView将开始刷新:(UIScrollView*)scrollView{
scrollView.scrollEnabled=是;
lastOffset=scrollView.contentOffset;
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
CGPoint nowOffset=scrollView.contentOffset;
NSLog(@“增量%f”,lastOffset.x-nowOffset.x);
如果((lastOffset.x-nowOffset.x)<0){
//取消注释以防止向左滚动
//scrollView.scrollEnabled=否;
}如果((lastOffset.x-nowOffset.x)>0,则为else{
//取消注释以防止向右滚动
//scrollView.scrollEnabled=否;
}否则{
scrollView.scrollEnabled=是;
}
}
可以通过将scrollView.contentSize高度设置为与scrollView.frame.size.height相同的值来删除垂直方向上的滚动。任何溢出的内容都将被隐藏。当然也可以这样做来限制垂直滚动。关闭自动布局。只有在禁用自动布局后,我才修复了相同的问题在内容视图中使用yout.Xcode 11.Automatic->Translate Masks to Constraintsawesome answer!显然,在将视图控制器设置为scrollview委托后可以工作。这不会提供问题的答案。若要评论作者或要求作者澄清,请在其帖子下方留下评论。哈。是的,很抱歉。我猜你知道你想看到什么,这是我遇到的问题的答案,但正如我现在看到的,与作者不完全一样。希望它仍然能帮助别人。谢谢,伙计。直接的解决方案。干杯。