Ios 如何在UIScrollView中禁用水平滚动?
我有一个280(宽)x350(高)的Ios 如何在UIScrollView中禁用水平滚动?,ios,uiscrollview,scroll,Ios,Uiscrollview,Scroll,我有一个280(宽)x350(高)的滚动视图和840(宽)x405(高)的内容视图 我使用分段控件在视图之间切换,如下所示: - (IBAction)segmentedClicked:(UISegmentedControl *)sender { CGFloat x = sender.selectedSegmentIndex * self.personalDetailsScrollView.frame.size.width; CGPoint point = CGPointMake(
滚动视图和840(宽)x405(高)的内容视图
我使用分段控件在视图之间切换,如下所示:
- (IBAction)segmentedClicked:(UISegmentedControl *)sender
{
CGFloat x = sender.selectedSegmentIndex * self.personalDetailsScrollView.frame.size.width;
CGPoint point = CGPointMake(x, 0);
[self.personalDetailsScrollView setContentOffset:point animated:YES];
}
我想禁用常规水平滚动,这样只有分段按钮才能水平滚动视图。垂直滚动应保持活动状态
尝试使用-(void)scrollViewDidScroll和此处提供的解决方案:()但由于某些原因,它对我无效。我没有尝试过,但我会采取以下方法:
在UIScrollView
中,有一个属性:
@property(非原子,只读)UIPangESTURE识别器*PangESTURE识别器
因此,我将创建自己的新uipangestrerecognizer
扩展和覆盖:
- (CGPoint)translationInView:(UIView *)view
{
CGPoint tmp = [super translationInView:view];
return CGPointMake(0, tmp.y);
}
将该手势识别器添加到滚动视图
,然后调用:
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:youCustomOne];
它应该能用。试试这个
- (IBAction)segmentedClicked:(UISegmentedControl *)sender
{
if(sender.selectedSegmentIndex == 0)
{
CGPoint point = CGPointMake(0, 0);
}
else
{
CGPoint point = CGPointMake(self.personalDetailsScrollView.frame.size.width, 0);
}
[self.personalDetailsScrollView setContentOffset:point animated:YES];
}
我知道这是一个迟来的答案,但我看到仍然没有被接受的答案,所以我会试一试
听起来你要做的是使用一个控制器来有效地控制3个独立的屏幕。您正试图根据用户在UISegmentedControl
中选择的内容在屏幕之间切换,您不希望用户仅通过水平滑动就能在视图之间平移。为什么不使用3个不同的视图控制器?我认为这是设置您尝试执行的操作的更理想的方法,因此您会发现它更容易实现。Swift 3,将UIScrollViewDelegate
设置到您的类中,然后使用下面的代码
scrollView.isDirectionalLockEnabled = true
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x>0 {
webView.scrollView.contentOffset.x = 0.0
}
}
尝试根据宽度大小更改滚动视图内容大小这可能有帮助吗?只需将其contentSizeWidth
0!!