it-swarm.com.de

Wie passe ich den linken Rand für Prototypzellen in einer UITableView an?

Wenn ich eine UITableViewController zum Beispiel über Datei → Neues Projekt ... → iOS → Master-Detail-Anwendung in Xcode erstelle, wird eine UITableView mit einer Prototypzelle erstellt.

Die generierte Ansichtshierarchie lautet:

UITableViewController view hierarchy

Ein linker "Rand" wird automatisch zwischen dem UIView linken Rand der Zelle und dem UILabel-Element "Title" des Textes erstellt, wie unten in orange dargestellt.

Prototype cell gap

Dies führt zur Laufzeit zu einem entsprechenden Abstand zwischen dem Bildschirmrand des Geräts und dem UILabel-Text:

Runtime gap

Wo ist also die Breite dieser Lücke festgelegt und wie kann sie angepasst werden?

Die Steuerelemente im Größeninspektor für das UILabel sind ausgegraut:

enter image description here

Meine bevorzugte Option wäre, die Breite dieser Lücke in Interface Builder festlegen zu können, aber ich würde auch gerne wissen, wo diese Lücke gesetzt wird und wie sie programmgesteuert geändert werden kann.

46
j b

Sie müssen lediglich die contentInset-Eigenschaft der Tabellenansicht festlegen. Sie können den Wert nach Ihren Bedürfnissen einstellen.

self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0);

ERGEBNIS DER ERGEBNISSE

48
milanpanchal

Gehen Sie zu Main.storyboard und wählen Sie den Inspector UITableViewCell> Attribute aus. Ändern Sie die Dropdown-Liste der Trennzeichen von Default Insets in Custom Insets. Ändern Sie den linken Einschub von 15 auf 0

enter image description here

35
farhan latheef

Ab iOS 8 steht die Zelleigenschaft layoutMargins zur Verfügung. Die richtige Methode zum Anpassen der Zellränder besteht also darin, diese Eigenschaft in Ihrem tableView:cellForRowAtIndexPath oder in Ihrer benutzerdefinierten UITableViewCell so einzustellen:

override func awakeFromNib() {
    super.awakeFromNib()

    self.layoutMargins = UIEdgeInsetsZero //or UIEdgeInsetsMake(top, left, bottom, right)
    self.separatorInset = UIEdgeInsetsZero //if you also want to adjust separatorInset
}

Ich hoffe das kann jemandem helfen.

34

Fügen Sie einfach die Methode in Ihren Code ein, wie im Link unten angegeben

Wie entferne ich den Rand auf der linken Seite eines UITableView, ohne eine Lücke auf der rechten Seite zu schaffen?

Die Methode, die ich erwähnen möchte, ist 

-(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 ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    cell.preservesSuperviewLayoutMargins = NO;
    [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]){
    [cell setSeparatorInset:UIEdgeInsetsZero];
    }
}
8
Chetan

Setzen Sie in der TableView "Attributes-Inspector" die Separator-Insets auf "Custom" mit Left = 0 . Das ist alles, was Sie tun müssen!

6
Nicolai Nita

Wie WTIFS erwähnt, ist die UITableViewCell-Eigenschaft von indentation eine großartige Möglichkeit, Textbeschriftungen in integrierten Zellstilen einzurücken. Tun Sie einfach so etwas, um Nizza linken Rand zu erreichen:

cell.indentationLevel = 2;

Dies funktioniert jedoch nicht für imageView.

4
Dannie P

Wenn Sie ein Xib für Ihre Zelle verwenden, stellen Sie sicher, dass "Relativ zum Rand" nicht markiert ist. Sie können dies über den Inspektor überprüfen, wie im folgenden Screenshot gezeigt:

 enter image description here

Hier ist die schnelle Version von Chetans Antwort:

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        tableView.separatorInset = UIEdgeInsets.zero
        tableView.layoutMargins = UIEdgeInsets.zero
        cell.preservesSuperviewLayoutMargins = false
        cell.layoutMargins = UIEdgeInsets.zero
        cell.separatorInset = UIEdgeInsets.zero
}
0
Paul Lehn

Ich denke, ich habe gerade eine einfache Lösung gefunden. lol. 

Die oberste Antwort hat ein Problem ... es verringert die linke Lücke, führt jedoch zu einer rechten Lücke.

Ich habe den constrains im Interface Builder verwendet.

Fügen Sie zunächst eine -15 linke Randeinschränkung zur Tabellenansicht hinzu.

Fügen Sie dann Indentation zur Tabellenzelle hinzu, damit der Inhalt besser aussieht.


Hier sind ein paar Schritt-für-Schritt-Bilder:

Fügen Sie die Einschränkung hinzu. Denken Sie daran, das Kontrollkästchen "Abstand zum nächsten Nachbarn" zu deaktivieren.

Add the constraint. Remember to uncheck the "spacing to nearest neighbor".

Die Tabellenzellen bewegen sich nach links. Scheint aber zu nahe am Rand.

After adding the constraint

Wählen Sie also die Tabellenzelle aus und fügen Sie im rechten Bereich etwas Einzug ein.

add some indentation

0
WTIFS

Und wenn Sie nur den linken Rand des Textlabels der Zelle ändern möchten, ändern Sie den Horizontal Space Constraint 'Constant' in 16 oder 8 basierend auf der gewünschten Auffüllung (dies ist in der Nib-Datei). Wenn Sie nicht zur "Konstante" gelangen können Wählen Sie die Beschriftung aus, ändern Sie die X-Koordinate in der FrameRectangle-Ansicht und klicken Sie dann links auf die Abhängigkeits-Pin) enter image description here

0
Naishta