Подтвердить что ты не робот

Как узнать, какой другой UIScrollView вмешивается в scrollsToTop?

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

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

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

4b9b3361

Ответ 1

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

- (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.

Ответ 2

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

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)
    }
}