我的scrollView
为280(w)x 350(h),content view
为840(w)x 405(h)。
我使用segmented control
之间切换视图:
- (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 以及此处提供的解决方案:(How to lock the horizontal scrolling of a scrollView in iOS)但由于某种原因它对我不起作用。
答案 0 :(得分:1)
我没有尝试过,但这是我采取的方法:
在UIScrollView
中,有一个属性:
@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer
所以我会创建自己的新UIPanGestureRecognizer
扩展名并覆盖:
- (CGPoint)translationInView:(UIView *)view
{
CGPoint tmp = [super translationInView:view];
return CGPointMake(0, tmp.y);
}
将该手势识别器添加到scrollview
,然后调用:
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:youCustomOne];
它应该有用。
答案 1 :(得分:0)
试试这个
- (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];
}
答案 2 :(得分:0)
我知道这是一个迟到的答案,但我看到仍然没有接受的答案,所以我会试一试。
听起来你要做的就是使用1个控制器来有效地保持3个独立的屏幕。您尝试在屏幕之间切换,具体取决于用户在UISegmentedControl
中选择的内容,并且您不希望用户只需横向滑动即可在视图之间进行平移。为什么不只有3个不同的视图控制器?我认为这是设置您要做的事情的更期望的方式,因此您会发现它更容易实现。
答案 3 :(得分:0)
Swift 3,将UIScrollViewDelegate
设置为您的班级,然后使用下面的代码。
scrollView.isDirectionalLockEnabled = true
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x>0 {
webView.scrollView.contentOffset.x = 0.0
}
}