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:
Warum? Es ist eine Standardvisualisierung? Kann ich etwas ändern, um diese weiße linke Polsterung zu entfernen?
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];
}
-(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];
}
}
Alternativ können Sie dies auch im Interface Builder (IB) bearbeiten:
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
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];
}
}
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):
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()
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
Für diejenigen von Ihnen, die die UIEdgeInsetS-Einstellungen in Swift beibehalten möchten und keine Storyboards verwenden:
Vorher: (Standardverhalten)
__Code-Auszug__
Add the following code:
tableView.separatorInset.right = tableView.separatorInset.left
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.