Un'applicazione contiene un UITableView contenente un UITableViewCell personalizzato. La cella a sua volta contiene un UIImageView.Perché UIImageView viene ridimensionato quando si assegna una nuova immagine in iOS 6?
Il problema è che modificando l'immagine in cellForRowAtIndexPath rende l'immagine occupa l'intera area UITableViewCell:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
NSString *path = [[NSBundle mainBundle] pathForResource:@"bigrect" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];
cell.imageView.image = image;
return cell;
}
In IB, è stato selezionato 'Aspect Fit' come modalità, ma cambiare questo campo non ha alcun effetto apparente sul risultato.
Tuttavia, quando l'immagine è impostata da IB, senza chiamata a cell.imageView.image = immagine nel mio codice, il risultato è esattamente quello che mi piacerebbe vedere. L'immagine rimane entro i limiti che ho definito per l'UIImageView in IB e non tenta di scalare per adattare l'intera altezza verticale della UITableViewCell:
L'immagine che sto utilizzando è 1307x309 pixel, nel caso sia importante. I test sono stati eseguiti su simulatore iOS 6.1.
ho notato questo dal UIIMageView Documentation:
In iOS 6 e successivamente, se si assegna un valore alla proprietà restorationIdentifier di questa vista, si tenta di mantenere il telaio dell'immagine visualizzata. In particolare, la classe conserva i valori dei limiti, del centro e delle proprietà di trasformazione della vista e della proprietà anchorPoint del livello sottostante. Durante il ripristino, la vista dell'immagine ripristina questi valori in modo che l'immagine appaia esattamente come prima. Per ulteriori informazioni su come funziona la conservazione dello stato e il ripristino, consultare la Guida alla programmazione dell'app iOS.
Tuttavia, nulla qui o altrove nella documentazione che ho trovato ha risolto il problema. L'aggiunta di un "Restoration ID" di "Foo" a UIImageView in IB sotto "Identity" non modificava il comportamento. Deselezionando 'Usa Autolayout' anche non ha modificato il comportamento.
Come posso impedire a iOS di ridimensionare UIImageView in UITableViewCell quando si imposta l'immagine?
perché non impostare il frame corretto della vista immagine dopo aver assegnato la proprietà dell'immagine? –
@PatrickGoley, potrebbe essere l'ultima risorsa, suppongo. Preferirei davvero non avere a che fare con il layout manuale però. –