Как узнать, какой другой UIScrollView мешает scrollsToTop? - PullRequest
11 голосов
/ 16 декабря 2011

У меня есть несколько контроллеров представления с одним или несколькими представлениями прокрутки. Хотя я явно установил флаги scrollsToTop в контроллерах представления с более чем одним представлением прокрутки, некоторые представления прокрутки отказываются прокручиваться вверх, когда я касаюсь строки состояния.

После нажатия на другой контроллер представления и его установки жест иногда работает в том виде, в котором он раньше не был.

Это очень запутанно, и я просто не знаю, в чем проблема. Как эффективно решить эту проблему? Есть ли глобальное (частное) уведомление для касания строки состояния, чтобы я мог прокручивать представления вручную?

Ответы [ 2 ]

22 голосов
/ 16 июля 2012

Я использовал код, подобный следующему, для отладки этого сценария, до:

- (void)findMisbehavingScrollViews
{
    UIView *view = [[UIApplication sharedApplication] keyWindow];
    [self findMisbehavingScrollViewsIn:view];
}

- (void)findMisbehavingScrollViewsIn:(UIView *)view
{
    if ([view isKindOfClass:[UIScrollView class]])
    {
        NSLog(@"Found UIScrollView: %@", view);
        if ([(UIScrollView *)view scrollsToTop])
        {
            NSLog(@"scrollsToTop = YES!");
        }
    }
    for (UIView *subview in [view subviews])
    {
        [self findMisbehavingScrollViewsIn:subview];
    }
}

В зависимости от того, сколько UIScrollViews вы найдете, вы можете изменить этот код, чтобы помочь отладить вашу конкретную ситуацию.

Некоторые идеи:

  • Изменение цветов фона различных видов прокрутки для их идентификации на экране.
  • Распечатайте иерархию представлений этих прокруток, чтобы идентифицировать все их суперпредставления.

В идеале вы должны найти только один UIScrollView в иерархии окон, для которого scrollsToTop установлено в YES.

1 голос
/ 30 октября 2015

Я изменил принятые ответы на быстрые для удобства:

func findMisbehavingScrollViews() {
    var aview = UIApplication.sharedApplication().keyWindow
    findMisbehavingScrollViewsIn(aview!)
}

func findMisbehavingScrollViewsIn(aview: UIView) {
    if aview.isKindOfClass(UIScrollView) {
        if (aview as! UIScrollView).scrollsToTop {
            print("found uiscrollview \(aview)")
        }
    }
    for bview in aview.subviews {
        findMisbehavingScrollViewsIn(bview)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...