2013-02-15 2 views
0

У меня есть scrollView 280 (w) x 350 (h) и content view из 840 (w) x 405 (h).Как отключить горизонтальную прокрутку в UIScrollView?

переключаться между видами с 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]; 
} 

Я хочу, чтобы отключить регулярную горизонтальную прокрутку, так только сегментированные кнопки будут прокручивать вид по горизонтали. Вертикальный свиток должен оставаться активным.

Пытались использовать - (Недействительными) scrollViewDidScroll и решения, предлагаемые здесь: (How to lock the horizontal scrolling of a scrollView in iOS), но он не работает для меня по какой-то причине.

+2

Попробуйте изменить размер содержимого прокрутки в соответствии с размером ширины – Dany

+1

Возможно, это может помочь? http://stackoverflow.com/questions/1062693/how-to-disable-horizontal-scrolling-of-scrollview-iphone –

+1

Просто установите его 'contentSizeWidth' 0 ..... !! – TheTiger

ответ

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]; 

Должно работать.

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]; 
    } 
+0

Также Dosen't работает ... – MatanGold

0

Я знаю, что это поздний ответ, но я вижу, что до сих пор не принят ответ, так что я дам ему идти.

Похоже на то, что вы пытаетесь сделать, это использовать 1 контроллер, чтобы эффективно удерживать 3 отдельных экрана. Вы пытаетесь переключаться между экранами в зависимости от того, что пользователь выбирает в UISegmentedControl, и вы не хотите, чтобы пользователь мог перемещаться между представлениями только горизонтально. Почему у вас не просто 3 разных контроллера? Я думаю, что это более ожидаемый способ настроить то, что вы пытаетесь сделать, и поэтому вам будет намного проще реализовать его.

0

Swift 3, Комплект UIScrollViewDelegate Вашему классу, а затем используйте код ниже.

scrollView.isDirectionalLockEnabled = true 

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
     if scrollView.contentOffset.x>0 { 
      webView.scrollView.contentOffset.x = 0.0 
     } 
    } 
Смежные вопросы