2015-11-10 3 views
1

Итак, у меня есть UICollectionView в UIViewController, который является одним из контроллеров корневого представления в панели вкладок. Я установил contentInset для UICollectionView, чтобы добавить ярлык в начало коллекции, и в этом случае это будет означать, что UILabel является частью коллекции, но не является частью headerView коллекции. Для достижения добавления UILabel к UICollectionView, я используюнеправильный порядок доступности в UICollectionView

collectionView.addSubview(theLabel) 

и я перехожу голос поверх и запустить приложение. происходит то, что голос за кадром проходит через все UICollectionViewCells в правильном порядке вплоть до последнего CollectionViewCell, чтобы начать, затем переходит к метке, которая находится в верхней части коллекцииView, а затем переходит к tabBar. Я попытался ответить в этой Change order of read items with VoiceOver, но не везло, это решение было изменить порядок

self.accessibilityElements 

к тому, как я хочу, кроме озвучивания на самом деле не следить за порядком в self.accsibilityElements и I я не уверен, что происходит, кто-нибудь сталкивался с теми же проблемами, что и приказ о доступности, который был надуман, потому что в UICollectionView использовался «addubView». IF (и я говорю, ЕСЛИ, потому что я не думаю, что кто-то добавил бы subView в collectionView таким образом), у кого есть какие-то мысли, пожалуйста, помогите мне здесь, застрял с этой ошибкой дольше всего.

Редактировать

class CollectionViewSubViewsAddedByTags: UICollectionView { 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

var accessibilityElementsArray = [AnyObject]() 

override var accessibilityElements: [AnyObject]?{ 

    get{ 
     return accessibilityElementsArray 
    } 

    set(newValue) { 
     super.accessibilityElements = newValue 
    } 
} 

override func accessibilityElementCount() -> Int { 
    return accessibilityElementsArray.count 
} 

override func accessibilityElementAtIndex(index: Int) -> AnyObject? { 
    return self.accessibilityElementsArray[index] 
} 

override func indexOfAccessibilityElement(element: AnyObject) -> Int { 
    return (accessibilityElementsArray.indexOf({ (element) -> Bool in 
     return true 
    }))! 
} 

override func didAddSubview(subview: UIView) { 
    super.didAddSubview(subview) 
    accessibilityElementsArray.append(subview) 
    accessibilityElementsArray.sortInPlace { $0.tag<($1.tag)} 
} 

override func willRemoveSubview(subview: UIView) { 
    super.willRemoveSubview(subview) 
    if let index = (accessibilityElementsArray.indexOf({ (element) -> Bool in 
     return true 
    })) { 
     accessibilityElementsArray.removeAtIndex(index) 
    } 

} 

} 

Спасибо, Shabri

+0

Почему бы вам не захотеть добавить подвид в коллекцию? –

+0

мы могли бы пойти с 1 из этих 2 решений, у нас уже есть другое представление (разрешаем это viewviewView) внутри заголовка 1) добавьте theLabel внутри с рекламойView внутри заголовка для коллекцииView 2) Добавьте метку вверху из cpollectionView, предоставляя коллекцииView contentInset. Если мы пойдем первым путем, проблема возникает, когда мы находимся в ландшафте, мы не хотим видеть метку, скажем, я добавляю Label и рекламный просмотр в headerView с некоторыми константами, когда я скрываю Label в ландшафте, У меня возникли бы проблемы с ограничениями –

+0

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

ответ

0

Я столкнулся с той же проблемой - я использую верхнюю вставку на нашем UICollectionView, чтобы места для заголовка, который скользит по/off с прокруткой. Если я использую Voice Over с этим макетом, вся система запутывается, и порядок фокусировки неверен. То, что я сделал, чтобы обойти это, - это использовать альтернативный макет при активации VO - вместо размещения заголовка над представлением коллекции с помощью вставки, я поместил заголовок вертикально над представлением коллекции и установил 0 верхнюю вставку в виде коллекции ,

Смежные вопросы