2013-02-20 14 views
6

Sto cercando di nascondere gli angoli del mio UITextView agli angoli arrotondati del gruppo UITableViewCell che lo contiene. Ecco uno screenshot della cella nella sua forma attualeclipToBounds e maschereToBounds in UITableViewCell raggruppati

UITextView inside grouped UITableViewCell

Ecco parte del codice che sto usando per cercare di evitare che gli angoli si sovrappongano i miei confini cellule. Ho provato entrambi

cell.contentView.layer.masksToBounds = YES; 
cell.layer.masksToBounds = YES; //tried this as a test, still doesn't work 
detailTextView.clipsToBounds = YES; 
[cell.contentView addSubview:detailTextView]; 

e

cell.layer.masksToBounds = YES; 
cell.contentView.layer.masksToBounds = YES; 
detailTextView.clipsToBounds = YES; 
[cell addSubview:detailTextView]; 

Questo è, ovviamente, non funziona, che cosa mi manca?

+0

hai provato 'cell.clipsToBounds = YES;'? – Patrick

+0

Sì, ma non è quello che mi serve comunque. 'clipsToBounds' significa che la cella nasconde parti del suo layer che si trovano all'esterno dei suoi genitori. Voglio il 'UITextView' per nascondere le parti del suo strato al di fuori del suo genitore (le celle contentView/la cella stessa) – conorgriffin

+1

i limiti del tuo contentView sono più grandi dei limiti della tua cella quindi il clipping del contentview non risolverà il tuo problema - tu devi agganciare alla cella – Pfitz

risposta

0

Sono abbastanza sicuro che non è possibile mascherare gli angoli in questo modo. La cella backgroundView è un'immagine per un gruppo UITableView quindi non c'è alcun senso di mascheramento.

Una possibile soluzione al problema sarebbe quella di arrotondare gli angoli da soli. Questo è un po 'complicato dal momento che si desidera solo arrotondare gli angoli superiori della cella superiore e gli angoli inferiori della cella inferiore. Fortunatamente, @lomanf ha pubblicato un'ottima soluzione per arrotondare gli angoli arbitrari qui: Round two corners in UIView. Usando il suo metodo MTDContextCreateRoundedMask, possiamo raggiungere il nostro obiettivo.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Other cell instantiation 

    // First cell in section 
    if (indexPath.row == 0) { 
     [self roundTopOrBottomCornersOfCell:cell top:YES];  
    } 
    // Last cell in section 
    else if (indexPath.row == tableView.numberOfRowsInSection:indexPath.section-1) { 
     [self roundTopOrBottomCornersOfCell:cell top:NO]; 
    } 
} 

// Modified from the second part of @lomanf's Solution 1 
- (void)roundTopOrBottomCornersOfCell:(UITableViewCell*)cell top:(BOOL)top { 
     // Set constant radius 
     CGFloat radius = 5.0; 

     // Create the mask image you need calling @lomanf's function 
     UIImage* mask; 
     if (top) { 
      mask = MTDContextCreateRoundedMask(self.view.bounds, radius, radius, 0.0, 0.0); 
     } 
     else { 
      mask = MTDContextCreateRoundedMask(self.view.bounds, 0.0, 0.0, radius, radius); 
     } 

     // Create a new layer that will work as a mask 
     CALayer* layerMask = [CALayer layer];    
     layerMask.frame = cell.bounds; 

     // Put the mask image as content of the layer 
     layerMask.contents = (id)mask.CGImage; 

     // Set the mask layer as mask of the view layer 
     cell.layer.mask = layerMask; 
}   
0

Lo stesso problema si è verificato a me

La differenza è che sto utilizzando lo stile semplice e sto cercando di rendere ogni cella con angolo arrotondato. Infine, l'ho fatta, qui è il mio modo:

1. inserire questo codice nella vostra abitudine metodo awakeFromNib di tableViewCell

[cell.layer setMasksToBounds:YES]; 
    [cell.layer setCornerRadius:5.0]; 

2. impostare il colore di sfondo la vostra abitudine di contentView di TableViewCell al colore bianco, quindi impostare il colore del tuo tavoloViewView per chiarire il colore. È tutto.

Problemi correlati