2017-03-15 2 views
0

Ich bin ein sample project anhängen, damit Sie testen und sehen, was ich tun kann, um dies zu beheben.Größe UITableViewCell, um Etikett oder Bild und abgerundete Ecken anzupassen

Ich versuche, das Bild der Höhe dynamisch zu ändern und gleichzeitig zwei Ecken auf jeder anderen Zelle zu runden. Dies führt zu einer Maske, die abgeschnitten wird.

Grundsätzlich ist hier, was ich versuche zu erreichen:

Höhe
  1. UITableView der Reihe ist auf automatisch.

    _nTableView.rowHeight = UITableViewAutomaticDimension; 
    _nTableView.estimatedRowHeight = 150; 
    
  2. Bilder herunterladen SDWebImage Bibliothek unter Verwendung eines CustomTableViewCell Verwendung

    [self.nImageView sd_setImageWithURL:[NSURL URLWithString:imageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL){}]; 
    
  3. Configure eine Zelle, die Ecken abzurunden auf seiner Zeile je

    UIBezierPath *maskPath = [UIBezierPath 
             bezierPathWithRoundedRect:self.bubbleView.bounds 
             byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerTopLeft) 
             cornerRadii:CGSizeMake(20, 20)]; 
    
    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    
    maskLayer.frame = self.bubbleView.bounds; 
    maskLayer.path = maskPath.CGPath; 
    
    self.bubbleView.layer.mask = maskLayer; 
    

tun die obigen Ergebnisse in eine Maske ist abgeschnitten aber die Höhe wird korrekt berechnet. Siehe unten: enter image description here

Basierend auf dieser stack overflow's question, müssen wir die Maske entfernen, wenn es eine gibt. Ich habe versucht, die Maske in der watchFromNib-Methode auf Null zu setzen, aber das hat keine Auswirkungen.

self.nImageView.layer.mask = nil; 
self.nImageView.layer.masksToBounds = NO; 

Ich habe auch versucht, aus dieser question die Antworten folgenden, aber es ergibt sich die App abstürzt.

Vielen Dank im Voraus.

+0

Sie die Größe des Bildes festgelegt zu halten sind oder variabel? –

+0

Ergreift Ihr Beispielprojekt ... ja, es stürzt ab, bis ich den Code "remove layer" in cellForRowAtIndexPath entferne ... aber ich kann nicht sagen, was Sie vorhaben. Hast du das Bild hier was du willst *? Wenn nicht, wie soll es aussehen? – DonMag

+0

@DonMag Ich habe das Projekt mit dem Entfernen der "Schicht" Code aktualisiert. Wenn Sie [cell configureBubbleInRow: indexPath.row] kommentieren, werden Sie sehen, was ich zu sehen versuche. Sehen Sie dies: http://imgur.com/a/JVtA3 –

Antwort

1

ist eine mögliche Lösung - vielleicht nicht die beste sein, kann nicht genau das tun, was man braucht, aber könnten Sie auf Ihrem Weg ...

Anstatt zu versuchen, die Schichten/Masken aus Ihrem zu manipulieren Verwenden Sie für die benutzerdefinierte UITableViewCell-Klasse eine UIView-Unterklasse als Bildhalter. Der Code dieser Klasse kann die abgerundeten Ecken und die Aktualisierung der Layer-/Maskengröße verarbeiten.

Siehe Beispiel hier: https://github.com/DonMag/dhImage

+0

Vielen Dank! Das hat es funktioniert! –

-1

Zur Höhe der Zeile basierend gesetzt auf es Inhalt ist:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 

    if(/*check if content is text label*/) 
    { 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell1"]; 
     UILabel *lbl = (UILabel*)[ cell.contentView viewWithTag:1000]; 
     lbl.text = message; 
     [cell layoutIfNeeded]; 
     CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 

     if(size.height < 100) { 
      return 100; 
     } 
     else { 
      return size.height; 
     } 
    } 
    else {     // content is image 
     return 200; 
     } 
    } 

Konfigurieren Sie eine Zelle, die die Ecken abzurunden:

 SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader]; 
     [downloader downloadImageWithURL:addr 
           options:0 
           progress: 
        ^(NSInteger receivedSize, NSInteger expectedSize) { 
         // progression tracking code 
           } 
           completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { 
         if (image && finished) { 
          // Pass the imageView to this block 
          // After completion display downloaded image in imageView 
          imageView.image = image; 
         } 
        }]; 

:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    . 
    . 
    . 
    [cell.contentView.layer setCornerRadius:10.0f]; 
    return cell; 
} 

Bilder SDWebImage Bibliothek zum Download Ich hoffe es hilft!! Hier

+0

Hoffe es hilft !! Antwort zurück @AndyM –

+0

ein Absturz war wegen der Lage in cellForRowAtIndexPath entfernen, aber Sie nicht erwähnt, auch Ihr die Variablennamen ohne Grund ändert – zombie

+0

, welcher Teil? @zombie –