webentwicklung-frage-antwort-db.com.de

Xcode 7 iOS 9 UITableViewCell Separator Inset Problem

Dies ist keine Frage, sondern eine Lösung für das Problem, mit dem ich konfrontiert war.

Wenn die Anwendung in Xcode 7 unter iOS 9 auf iPad-Geräten ausgeführt wird, lassen die UITableView-Zellen einen gewissen Rand auf der linken Seite der Tabellenansicht. Wenn Sie das Gerät auf Querformat drehen, werden die Ränder vergrößert.

Die Lösung, die ich gefunden habe, ist:

Setzen Sie "cellLayoutMarginsFollowReadableWidth" auf NO.

self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;

Da diese Eigenschaft nur in iOS 9 verfügbar ist, müssen Sie eine Bedingung festlegen, um die iOS-Version zu überprüfen, da sie sonst abstürzt.

if(NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_1)
{
    self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
}

Hoffe, es ist hilfreich für andere.

68
stuti

Beste Lösung für iOS 9 und höher

Dies ist auf eine neue Funktion zurückzuführen, die als lesbare Inhaltshandbücher bezeichnet wird. Es bietet Ränder, die zum Lesen geeignet sind. Auf dem iPhone und dem iPad im Hochformat sind die Ränder also sehr klein, auf dem iPad im Querformat jedoch größer. In iOS 9 befolgen die Zellränder von UITableView standardmäßig das Handbuch für lesbare Inhalte.

Wenn Sie damit aufhören möchten, setzen Sie einfach das cellLayoutMarginsFollowReadableWidth der tableView auf NO/false.

Quelle: https://forums.developer.Apple.com/thread/5496

39
Vizllx

Perfekte Lösung bis iOS 9

In viewDidLoad

Ziel c

- (void)viewDidLoad {
    [super viewDidLoad];
    //Required for iOS 9
    if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 9.0) {
        self.testTableView.cellLayoutMarginsFollowReadableWidth = NO;
    }
}

Swift

 override func viewDidLoad() {
    super.viewDidLoad()
    if #available(iOS 9.0, *) {
      tableViewDiet.cellLayoutMarginsFollowReadableWidth = false
    }
  }

Fügen Sie in TableViewDelegate-Methoden den folgenden Code hinzu:

Ziel c

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

    // Remove seperator inset
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }

    // Prevent the cell from inheriting the Table View's margin settings
    if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        [cell setPreservesSuperviewLayoutMargins:NO];
    }

    // Explictly set your cell's layout margins
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

Swift

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

    // Remove seperator inset
    if cell.respondsToSelector(Selector("setSeparatorInset:")) {
      cell.separatorInset = UIEdgeInsetsZero
    }

    // Prevent the cell from inheriting the Table View's margin settings
    if cell.respondsToSelector(Selector("setPreservesSuperviewLayoutMargins:")) {
      cell.preservesSuperviewLayoutMargins = false
    }

    // Explictly set your cell's layout margins
    if cell.respondsToSelector(Selector("setLayoutMargins:")) {
      cell.layoutMargins = UIEdgeInsetsZero
    }
  }
13
Bhuvan Bhatt

Ein bisschen spät. Ich hoffe, ist hilfreich für jemand anderen ...

if #available(iOS 9.0, *) {
      myTableView.cellLayoutMarginsFollowReadableWidth = false
}
3
TomCobo

readableContentGuide ist eine Layout-Anleitung, die bereits zu jedem UIView hinzugefügt wurde.

Dies soll sicherstellen, dass der Benutzer nicht den Kopf drehen muss, um den Inhalt zu lesen.

Wenn Sie dem Leitfaden für lesbare Inhalte folgen möchten, gehen Sie wie folgt vor:

let baseSection = UIView()

contentView.addSubview(baseSection)

baseSection.translatesAutoresizingMaskIntoConstraints = false

let insets = UIEdgeInsets(top: 4, left: 0, bottom: 4, right: 0)

baseSection.leadingAnchor.constraint(equalTo: readableContentGuide.leadingAnchor, constant: insets.left).isActive = true
baseSection.trailingAnchor.constraint(equalTo: readableContentGuide.trailingAnchor, constant: -insets.right).isActive = true
baseSection.topAnchor.constraint(equalTo: contentView.topAnchor, constant: insets.top).isActive = true
baseSection.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -insets.bottom).isActive = true

Hinweis: Verwenden Sie im Code über dem unteren und oberen Anker die contentView anstelle von readableContentGuide, damit sich die vertikalen Ränder des Inhalts basierend auf dem tableView.rowHeight Ändern.

0
user1046037