it-swarm.com.de

Wie entferne ich den letzten Rand der letzten Zelle in UITableView?

In meiner App verwende ich eine UITableView .__ Mein Problem ist, dass ich den letzten Rand der letzten Zelle in UITableView entfernen möchte.

Bitte überprüfen Sie das folgende Bild:

enter image description here

64
user2289379

Aktualisiert am 14.09.15. Meine ursprüngliche Antwort ist veraltet, aber es ist immer noch eine universelle Lösung für alle iOS-Versionen:

Sie können die Standard-Trennlinie von tableView ausblenden und Ihre benutzerdefinierte Zeile am oberen Rand jeder Zelle einfügen. Der einfachste Weg, ein benutzerdefiniertes Trennzeichen hinzuzufügen, ist das Hinzufügen einer einfachen UIView mit einer Höhe von 1px:

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.bounds.size.width, 1)];
separatorLineView.backgroundColor = [UIColor grayColor];
[cell.contentView addSubview:separatorLineView];

Bis heute abonniere ich eine andere Möglichkeit , um zusätzliche Trennzeichen unter den Zellen auszublenden (funktioniert für iOS 6.1 und höher):

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
21
onegray

Die beste Lösung ist das Hinzufügen einer Fußzeilenansicht. Der folgende Code verdeckt die letzte Zelle perfekt:

Ziel c

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)];

Swift 4.0

tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1))
117
Tonny Xu

In iOS 7 gibt es eine einfachere Lösung. Angenommen, Zelle ist Ihre letzte Zelle:

cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0);
39
davidisdk

Dies funktioniert für mich in iOS 7 und 8:

cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGRectGetWidth(tableView.bounds));

HINWEIS: Seien Sie vorsichtig bei der Verwendung von tableView.bounds, da dies manchmal den falschen Wert anzeigt, je nachdem, wann Sie ihn aufrufen. Siehe Falsche Grenzen im Querformat melden

13
Jamie Forrest

Fügen Sie diese Codezeile in viewDidLoad() hinzu.

tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0.001))

Dadurch wird sichergestellt, dass das letzte Trennzeichen ersetzt wird und die (unsichtbare) Fußzeilenansicht keine zusätzliche Höhe einnimmt. Da die Breite der Fußzeile von UITableView verwaltet wird, können Sie sie auf 0 setzen.

3
Jonny

Hier ist das Mittel, das ich derzeit verwende. Es ist vielleicht nicht der beste Ansatz, aber es funktioniert.

Entfernen Sie SeparatorColor und setSeparatorStyle, um ein benutzerdefiniertes Trennzeichen zu erstellen

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    [self.tableView setSeparatorColor:[UIColor clearColor]];
}

Fügen Sie jeder Zelle mit TableView-Hintergrund ein benutzerdefiniertes Trennzeichen hinzu

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    ...

    UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.size.height-1, 320, 1)];
    separatorLineView.backgroundColor = self.tableView.backgroundColor;
    [cell.contentView addSubview:separatorLineView];

    return cell;
}
2
rtato

Meine kürzere Version:

self.tblView.tableFooterView = [UIView new];
2
Marco Mardegan

Nein, das kannst du nicht tun. Diese Separatoren sind ziemlich schnittig und trocken, was Stil und Farbe angeht. Eine alternative Lösung wäre jedoch, alle Separatoren auszuschalten und ein Hintergrundbild mit einer horizontalen Linie für alle Zellen außer der letzten festzulegen.

EX:

    [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    if (indexPath.row == [myArray count] - 1) {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]];
        [cell setBackgroundView:imageView];
    }
2
Mick MacCallum

Für iOS 7 und höher

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        BOOL bIsLastRow = NO;

        //Add logic to check last row for your data source
        NSDictionary *dict = [_arrDataSource objectAtIndex:indexPath.section];
        if([_arrDataSource lastObject] == dict)
        {
           bIsLastRow = YES;
        }

        //Set last row separate inset left value large, so it will go outside of view
        if ([cell respondsToSelector:@selector(setSeparatorInset:)]) 
        {
            [cell setSeparatorInset:UIEdgeInsetsMake(0, bIsLastRow ? 1000 :0, 0, 0)];
        }
    }
1
Aditya Deshmane

Der folgende Code hilft mir, das Trennzeichen aus der letzten Zeile in einer UITableView zu entfernen.

Swift 3.0

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) { cell.separatorInset.right = cell.bounds.size.width } }

1
user2991638

In Swift einfach:

tableView.tableFooterView = UIView()
1
DungeonDev

Eine weitere Option ist die Unterklasse von UITableView

@synthesize hideLastSeparator = _hideLastSeparator;
@synthesize hideLastSeparatorView = _hideLastSeparatorView;
-(void)setHideLastSeparator:(BOOL)hideLastSeparator {
    if (_hideLastSeparator == hideLastSeparator) {
        return;
    }
    _hideLastSeparator = hideLastSeparator;
    if (_hideLastSeparator) {
        _hideLastSeparatorView = [[UIView alloc] initWithFrame:CGRectMake(0, self.contentSize.height, self.bounds.size.width, 0.5f)];
        _hideLastSeparatorView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
        _hideLastSeparatorView.backgroundColor = self.backgroundColor;
        [self addSubview:_hideLastSeparatorView];
        [self hideSeparator];
    }
    else {
        [_hideLastSeparatorView removeFromSuperview];
        _hideLastSeparatorView = nil;
    }
}
-(void)setContentSize:(CGSize)contentSize {
    [super setContentSize:contentSize];
    if (_hideLastSeparator) {
        [self hideSeparator];
    }
}
-(void)hideSeparator {
    CGRect frame = _hideLastSeparatorView.frame;
    frame.Origin.y = self.contentSize.height - frame.size.height;
    _hideLastSeparatorView.frame = frame;
}

Die .h sollte nur Eigenschaftsdeklarationen für hideLastSeparator und hideLastSeparatorView enthalten.
Wenn Sie das Trennzeichen ausblenden möchten, verwenden Sie die neue Klasse und legen Sie myTableView.hideLastSeparator = YES fest.
Das funktioniert so, dass das letzte Trennzeichen durch Hinzufügen einer neuen Ansicht darüber blockiert wird. 

Dies ist meiner Meinung nach etwas einfacher zu verwenden (als mit einem benutzerdefinierten Trennzeichen oder dem Setzen des letzten Trennzeichens der letzten Zelle) und vermeidet einige seltsame Animationen, die die Methode zum Festlegen einer tableFooterView manchmal verursacht (z. B. beim Einfügen/Löschen von Zeilen oder anderen) Tabellenanimationen).

0
alex-i

Suchen Sie den letzten Zellenindex im cellForRow-Delegaten und fügen Sie die Codezeile von unten ein:

cell.separatorInset = UIEdgeInsetsMake(
    0.f,
    40.0f,
    0.f,
    self.view.frame.size.width-40.0f
);
0

_tableView.tableFooterView = [[UIView-Zuordnung] initWithFrame: CGRectZero];

0
ohana

Erweiterungsbasierte Lösung für Swift 4, getestet auf iOS 12

Beim Festlegen einer leeren Ansicht von height = 1 wurde auch das Trennzeichen der letzten sichtbaren Zelle entfernt. Mit height = 0 wird jedoch nur das Trennzeichen der leeren Zellen entfernt

extension UITableView {
    func removeSeparatorsOfEmptyCells() {
        tableFooterView = UIView(frame: .zero)
    }

    func removeSeparatorsOfEmptyCellsAndLastCell() {
        tableFooterView = UIView(frame: CGRect(Origin: .zero, size: CGSize(width: 0, height: 1)))
    }
}
0
fl034

Swift 4.2

Um ein Trennzeichen zu erhalten, das in Ihrer letzten Zelle von links nach rechts verläuft, fügen Sie dies in Ihre UITableViewDataSource'stableView(_:cellForRowAt:)-Implementierung ein:

if tableView.numberOfRows(inSection: indexPath.section) - 1 == indexPath.row {
        cell.separatorInset = .zero
}

Wenn Sie kein Trennzeichen für eine bestimmte Zelle wünschen, ziehen Sie in Betracht, Ihr eigenes Trennzeichen zu zeichnen, und legen Sie tableView.separatorStyle = .none fest.

0
JanApotheker