wake-up-neo.net

Leerzeichen vor der Trennlinie in meine TableView

Ich habe eine Frage zu UITableView ... Ich habe einen UITableViewController und habe eine benutzerdefinierte Zelle erstellt .. Wenn ich das TableView visualisiere, sehe ich vor der Trennlinie ein kleines Leerzeichen, wie Sie in diesem Screenshot sehen können:

enter image description here

Warum? Es ist eine Standardvisualisierung? Kann ich etwas ändern, um diese weiße linke Polsterung zu entfernen?

45
Safari

Der führende Leerraum wird in iOS 7 standardmäßig bereitgestellt, auch für benutzerdefinierte Zellen.

Überprüfen Sie diese Eigenschaft separatorInset von UITableviewCell, um einen weißen Abstand an beiden Enden des Zeilentrennzeichens der Zelle zu entfernen/hinzuzufügen.

// Leerraum entfernen

cell.separatorInset = UIEdgeInsetsZero;

Alternativ können Sie auf UITableView-Ebene diese Eigenschaft verwenden:

if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {  // Safety check for below iOS 7 
    [tableView setSeparatorInset:UIEdgeInsetsZero];
}

Update - Der folgende Code funktioniert auf iOS 7 und iOS 8:

-(void)viewDidLayoutSubviews
{
    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    }
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}
89
Ashok

Alternativ können Sie dies auch im Interface Builder (IB) bearbeiten: 

  1. Gehe zu IB. 
  2. Wählen Sie Table View. 
  3. Öffnen Sie rechts den "Attribute Inspector".
  4. Ändern Sie "Separator Insets" von Standard zu Benutzerdefiniert.
  5. Ändern Sie das "Left" -Attribut von 15 in 0.

Dies hat den gleichen Effekt wie die Antwort von @ Ashok, erfordert jedoch nicht das Schreiben von Code.

Update Funktioniert auf iOS 7 und 8

Update Funktioniert auf iOS 9

33
michaelavila

Verwenden Sie den folgenden Code, um die unerwünschte Auffüllung in UITableView zu entfernen. Es funktioniert auf beiden IOS 8 und 7

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell     forRowAtIndexPath:(NSIndexPath *)indexPath
{

    if ([tableView respondsToSelector:@selector(setSeparatorInset:)])
    {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    } 

    if ([tableView respondsToSelector:@selector(setLayoutMargins:)])
    {
        [tableView setLayoutMargins:UIEdgeInsetsZero];
    }

    if ([cell respondsToSelector:@selector(setLayoutMargins:)])
    {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}
16
Anooj VM

Es gibt kein Leerzeichen! Ich habe einen Fehler in dieses Problem eingefügt, Apple hat es einfach als "kein Fehler" geschlossen, aber mir wurde gesagt, warum es kein Fehler ist. Ich habe ein einfaches Projekt geschrieben, das für jede mögliche Ansicht in der App eine Farbe setzt. Was ich sehe, ist, dass die Farbe dieser Pixel tatsächlich die Hintergrundfarbe der Zelle selbst ist (nicht die Inhaltsansicht!), Genau wie Apple es mir gesagt hatte.

Die cell.contentView.backgroundColor ist grün und die cell.background-Farbe ist rot (zusammen mit Pixie genommen):

enter image description here

Am Ende füllt cell.contentView die Zelle komplett ohne Trennzeichen. Mit einem Trennzeichen befindet sich unten ein oder zwei Pixel. Das Trennzeichen füllt, wenn es eingefügt wird, den größten Teil der Lücke, es werden jedoch einige Pixel der Zelle angezeigt.

Geheimnis gelüftet!

BEARBEITEN: Abhängig von der Konfiguration Ihres Storyboards scheint es, dass contentView.backgroundColor "verloren" wird oder auf Weiß gesetzt wird. Wenn Sie bei der Lieferung von Zellen überfahren, können Sie das gewünschte Verhalten erhalten:

    let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell

    cell.backgroundColor = UIColor.redColor()
    cell.contentView.backgroundColor = UIColor.greenColor()
10
David H

Schnell

cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
        cell.layoutMargins = UIEdgeInsetsZero
        cell.preservesSuperviewLayoutMargins = false
   }

Dieser hat für mich gearbeitet 

Vielen Dank

Das hat den Trick für mich gemacht:

cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false
7
lg365

Für diejenigen von Ihnen, die die UIEdgeInsetS-Einstellungen in Swift beibehalten möchten und keine Storyboards verwenden:

Vorher: (Standardverhalten)

Before, Default Setting__Code-Auszug__

Add the following code:

tableView.separatorInset.right = tableView.separatorInset.left

After, Implemented

5
ericgu

Hier ist eine Erweiterung der UITableViewCell-Klasse für Swift 3 und höher

extension UITableViewCell
{
    func removeSeparatorLeftPadding() -> Void
    {
        if self.responds(to: #selector(setter: separatorInset)) // Safety check
        {
            self.separatorInset = UIEdgeInsets.zero
        }
        if self.responds(to: #selector(setter: layoutMargins)) // Safety check
        {
            self.layoutMargins = UIEdgeInsets.zero
        }
    }
}

Verwendungszweck: 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "menuCellID")!
    // .. Your other code
    cell.removeSeparatorLeftPadding()
    return cell
}

Hoffe das hilft jemandem!

Naresh.

0
Naresh Reddy M