2016-06-28 18 views
1

In meiner Tabellenansicht habe ich Logik in meinem tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) um festzustellen, ob eine Zelle abgerundete Ecken auf der Oberseite, Unterseite oder keine abgerundeten Ecken hat.Löschtaste wird nicht auf UITableViewCell mit abgerundeten Ecken angezeigt

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

     if indexPath.row == 0 { 
      // round top 2 corners 
      let maskLayer = CAShapeLayer() 
      maskLayer.path = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [UIRectCorner .TopLeft, UIRectCorner .TopRight], cornerRadii: CGSizeMake(4, 4)).CGPath 
      cell.layer.mask = maskLayer 
     } 

     if indexPath.section != 1 { 

      if indexPath.row == self.tableView.numberOfRowsInSection(indexPath.section) - 1 { 
       let maskLayer = CAShapeLayer() 
       maskLayer.path = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [UIRectCorner .BottomLeft, UIRectCorner .BottomRight], cornerRadii: CGSizeMake(4, 4)).CGPath 
       cell.layer.mask = maskLayer 
      } 
     } 

    } 

Dies funktioniert, aber nachdem ich die Bearbeitung in der Tabellenansicht implementiert haben, passieren seltsame Dinge mit dem Löschen-Button.

mit den abgerundeten Ecken Code:

with rounded corners

Wenn ich die abgerundeten Ecken zu entfernen:

without rounded corners

Das verwirrt mich wirklich, weil ich nicht sicher bin, was ich tue falsch. Kann jemand helfen?

+0

Haben Sie versucht, indem 'cell.layer.maskToBounds = true'? –

+0

Sie sollten dies wahrscheinlich nicht direkt mit der Zellenansicht tun. Versuchen Sie, die Ebenenmaske stattdessen auf die contentView der Zelle anzuwenden und sehen Sie, ob das funktioniert. – Bringo

Antwort

0
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

     if indexPath.row == 0 { 
      // round top 2 corners 
      let maskLayer = CAShapeLayer() 
      maskLayer.path = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [UIRectCorner .TopLeft, UIRectCorner .TopRight], cornerRadii: CGSizeMake(4, 4)).CGPath 
      cell.contentView.layer.mask = maskLayer 
     } 

     if indexPath.section != 1 { 

      if indexPath.row == self.tableView.numberOfRowsInSection(indexPath.section) - 1 { 
       let maskLayer = CAShapeLayer() 
       maskLayer.path = UIBezierPath(roundedRect: cell.bounds, byRoundingCorners: [UIRectCorner .BottomLeft, UIRectCorner .BottomRight], cornerRadii: CGSizeMake(4, 4)).CGPath 
       cell.contentView.layer.mask = maskLayer 
      } 
     } 

    } 

Verwendung cell.contentView.layer.mask = Maskenebene

+0

Hmmm ... Es zeigt die Schaltfläche Löschen, aber die Zelle scheint nicht abgerundet zu sein. Ich habe versucht, die Zelle Hintergrundfarbe zu deaktivieren und die ContentView-Hintergrundfarbe zu weiß, was funktioniert, aber der Bereich um den roten Kreis zeigt den Tabellenansicht Hintergrund. – Minebomber