2014-01-21 8 views
2

Я пытаюсь имитировать то, что Apple Inc. использует в своем приложении «Сообщения», где у них есть вид прокрутки, который перенастраивается на надлежащее смещение, если вы вышли выше верхней части содержимого прокрутки.Смещение содержимого содержимого UIScrollView не работает по назначению

My scrollview занимает весь экран, но у меня есть строка заголовка, которая находится перед содержимым (например, «Сообщения»). При касании вида прокрутки смещение немедленно отбрасывается, как мусор, и верхнее содержимое скрывается под заголовком.

Мой код в настоящее время:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.scroller setDelegate:self]; 
    [self.scroller setScrollEnabled:YES]; 
    [self.scroller setContentSize:CGSizeMake(320, 600)]; 
    //****this offset is for the title bar**** 
    [self.scroller setContentOffset:CGPointMake(0, -100) animated:YES]; 
// Do any additional setup after loading the view. 
} 

и у меня есть функция пытается перенастроить вид на основе местоположения: у

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.y < 10){ 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
     [scrollView setContentOffset:CGPointMake(0, -100) animated:YES]; 
    } 
} 

Эта функция принимает LONGGGG ВРЕМЯ, прежде чем повторно настраивает вид.

Итак, наконец, мои вопросы:

  1. Как я могу убедиться, что на ощупь, Scrollview не игнорирует содержание смещения, а затем медленно приспосабливается назад к собственно смещение вскоре после этого.

  2. Как изменить скорость, с которой смещение содержимого переустанавливается, так что оно похоже на «Сообщения»?

+2

Вы должны добавить этот код в 'scrollViewDidEndDragging', как он вызывается только при взаимодействии пользователя с scrollView. Поскольку вы устанавливаете его смещение в 'scrollViewDidEndDecelerating', он меняет смещение по окончании торможения. Затем снова, после того, как установлено смещение, 'scrollViewDideEndDecelerating' вызывается снова, а смещение снова установлено, и этот процесс происходит рекурсивно. – n00bProgrammer

+1

Не помещайте свой вопрос в Xcode. Прочтите описание тега. Это не относится к вашему вопросу. – rmaddy

+0

оба комментария были полезны; однако переключение на scrollViewDidEndDragging не решило проблему. Как ни странно, загрузка на симулятор отлично работает, его при запуске через iphone возникает проблема (полностью обновленная версия ios) – kjbradley

ответ

4

Я нашел ошибку, что тот факт, что я использовал:

[self.scroller setContentOffset:CGPointMake(0, -100) animated:YES]; 

Когда я использую:

[self.scroller setContentInset:UIEdgeInsetsMake(self.statusbar.height,0,0,0)]; 
Смежные вопросы