Non sono sicuro di averlo capito per caso, ma questo ha funzionato per me. Nella UITableViewDataSource
:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[...]
UITableViewCell *standardCell;
if (UIAccessibilityIsVoiceOverRunning()) {
standardCell = [tableView dequeueReusableCellWithIdentifier:@"VO Cell"];
} else {
standardCell = [tableView dequeueReusableCellWithIdentifier:@"Regular Cell"];
}
//Configure the cell
[...]
return standardCell;
}
Credo sia il caso che IOS memorizza cellule senza le proprietà di accessibilità VoiceOver se viene spento per motivi di prestazioni. Quindi l'identificatore predefinito che si utilizza potrebbe essere correlato a una cella memorizzata nella cache che non ha queste proprietà. Quando VoiceOver è attivo e iOS tenta di dequeue queste celle, non trova le proprietà al suo interno e le interruzioni. Avendo Identificatori diversi, costringi iOS a mettere in cache le nuove celle quando VO è attivo.
Ancora, questa è solo un'ipotesi che sto facendo, ma il caso è che non ottengo questo problema quando accodo le celle in questo modo. Tuttavia, se li rimuovi dal modo in cui li ho citati, dovresti fare attenzione a un errore che potrebbe verificarsi:
Se stai eliminando le celle i cui identificatori sono impostati in un file .xib o in uno storyboard, come nell'immagine qui sotto, dovresti quindi impostare un'altra cella prototipo con l'identificatore di riutilizzo VO.
fonte
2012-10-17 15:29:09
Se qualcun altro ha problemi con questo problema, ho presentato un bug a Apple su questo problema. –
Ho lo stesso problema! Oggi ho iniziato ad aggiungere suggerimenti e materiale per l'accessibilità alla mia app. Questo fa davvero schifo. Potresti aggiungere l'id del radar qui così posso duplicare il bug. Ho ancora quel bug in 5.1 beta 2! –
@ChristianBeer ha trovato il tuo bug in Open Radar e l'ha duplicato. (rdar: // 10763569) Grazie. – edelaney05