голос за кадром может видеть только страницу uicollectionview

Итак, у меня есть UICollectionView с набором UICollectionViewCells, отображаемым с помощью пользовательского UILayout.I '

Мы сконфигурировали UILayout для размещения всех UICollectionViewCells почти точно так же, как они выложены в приложении для фотографий на ios.

Проблема в том, что, кажется, когда голос за кадром включен, и пользователь перебирает UICollectionViewCells с помощью пролистывания, когда пользователь добирается до последней видимой ячейки на странице и пытается пролистать вперед до следующей ячейки, он просто останавливается ,

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

Кто-нибудь знает, как получить такое поведение?

Ответы на вопрос(4)

Стивен'Ответ сработал для меня! Благодарю.

Я хочу добавить, что это влияет только на iOS6; похоже, они исправили это в iOS7.

Кроме того, вы можете сделать прокрутку немного быстрее и чище, передавая self вместо nil в UIAccessibilityPostNotification - вот так:

- (void)accessibilityElementDidBecomeFocused {    
    UICollectionView *collectionView = (UICollectionView *)self.superview;
    [collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self);
}

Вот как бы вы сделали это в Swift:

override func accessibilityElementDidBecomeFocused() {
    guard let collectionView = superview as? UICollectionView,
        let indexPath = collectionView.indexPath(for: self) else {
        return
    }

    collectionView.scrollToItem(at: indexPath, at: .left, animated: true)
    UIAccessibility.post(notification: .layoutChanged, argument: nil)
}

Этот ответ сработал и для меня. Спасибо!

Есть еще один звонок, который вы должны включить, чтобы заставить его работать. В противном случае ваш метод (void) accessibilityElementDidBecomeFocused никогда не будет вызван. Вы должны включить доступ к объекту Cell.

Вариант 1. В ViewController установите для экземпляра ячейки доступ.

Cell *cell = [cv dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];
[cell setIsAccessibilityElement:YES];

Вариант 2. Реализация интерфейса специальных возможностей в объекте ячейки:

- (BOOL)isAccessibilityElement
{
    return YES;
}

- (NSString *)accessibilityLabel {
    return self.label.text;
}

- (UIAccessibilityTraits)accessibilityTraits {
    return UIAccessibilityTraitStaticText;  // Or some other trait that fits better
}

- (void)accessibilityElementDidBecomeFocused
{
    UICollectionView *collectionView = (UICollectionView *)self.superview;
    [collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self);
}

После многих часов головной боли решение было действительно простым. Если кто-то еще сталкивался с подобной проблемой, я сделал следующее:

В подклассе UICollectionViewCell, который вы используете для своего CollectionView, переопределите accessibilityElementDidBecomeFocused и реализуйте его следующим образом:

- (void)accessibilityElementDidBecomeFocused
{
    UICollectionView *collectionView = (UICollectionView *)self.superview;
    [collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
}

Ваш ответ на вопрос