2013-09-29 12 views
11

In iOS 6 e precedenti l'imageView di uitableviewcell era posizionato completamente a sinistra con un offset di 0. In iOS 7 anche se questo è stato modificato e ora c'è uno spazio di 15 punti. Vorrei posizionare imageView come se fosse in iOS 6. Sto già creando sottoclassi di uitableviewcell con AKHighlightableAttributedCell per gestire il testo attribuito non evidenziato. Quindi, sulla base di alcune ricerche ho aggiunto:ios7 uitableviewcell immagine offset a sinistra

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 
    // Makes imageView get placed in the corner 
    self.imageView.frame = CGRectMake(0, 0, 80, 80); 
} 

Il problema è tutto il resto ancora non ottenere riposizionato e così sto pensando ci deve essere un modo migliore per fare questo. Avevo letto alcune persone che menzionavano l'utilizzo di un offset negativo per spostare tutto ma non ero sicuro di come questo avrebbe funzionato con i vincoli in quanto ha bisogno di scalare correttamente per ogni orientamento. C'è una soluzione più semplice a questo che mi manca? Grazie.

+1

Se si desidera un layout personalizzato, questo è l'approccio corretto. Hai solo bisogno di impostare la cornice delle etichette anche. – rmaddy

+0

Beh, forse una domanda migliore sarebbe questa. Ho aggiunto // Ottieni frame textlabel CGRect textlabelFrame = self.textLabel.frame; textlabelFrame.origin.x = 90; self.textLabel.frame = textlabelFrame; Che si occupa della posizione del titolo. Ma poi stavo pensando, non cambierà anche il contenuto a sinistra se il titolo è abbastanza lungo? Inoltre, c'è un bordo che separa le celle e non so quale sia il nome di quella vista o proprietà. Grazie per l'aiuto. –

risposta

7

Sembra che lo stavo facendo nel modo corretto. Il pezzo mancante riguardante il divisore tra i campi stava impostando l'inserto su iOS 7. Puoi farlo nel viewdidload o viewwillload e impostare self.tableView.separatorInset = UIEdgeInsetsMake (0, 0, 0, 0);

È necessario aggiungere un controllo se si utilizza iOS 7 o versione successiva poiché si tratta di una nuova proprietà, credo. Un'opzione migliore potrebbe essere impostarla nello storyboard selezionando la vista tabella e quindi impostando gli insiemi separatore da predefinito a personalizzato.

Ecco il metodo layoutSubviews che riposiziona imageView e textLabel. Se hai una descrizione, aggiungila pure.

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 
    // Makes imageView get placed in the corner 
    self.imageView.frame = CGRectMake(0, 0, 80, 80); 

    // Get textlabel frame 
    //self.textLabel.backgroundColor = [UIColor blackColor]; 
    CGRect textlabelFrame = self.textLabel.frame; 

    // Figure out new width 
    textlabelFrame.size.width = textlabelFrame.size.width + textlabelFrame.origin.x - 90; 
    // Change origin to what we want 
    textlabelFrame.origin.x = 90; 

    // Assign the the new frame to textLabel 
    self.textLabel.frame = textlabelFrame; 
} 
+1

è l'unico modo per fermare iOS7 aggiungendo il padding su entrambi i lati di una cella.imageView consiste nel sottoclasse la cella e applica quanto sopra visto che il comportamento predefinito non risponde all'impostazione del frame e degli insiemi di imageView a zero? –

+1

Se c'è, non ho potuto trovarlo. È un po 'un dolore e sarebbe stato bello per loro esporre un'opzione per questo. Sento che per le immagini senza bordi per le tableviewcells, è un dolore enorme ma almeno è possibile aggirarlo. Non ho riscontrato problemi con il modo in cui l'ho implementato finora. Sono aperto a una risposta migliore se esiste comunque. –

Problemi correlati