objective-c uitableview xcode7 ios9

objective c - Problema de inserción de separador Xable 7 iOS 9 UITableViewCell



objective-c xcode7 (4)

Un poco tarde. Espero que sea útil para alguien más ...

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

Esta no es una pregunta, sino una solución al problema que enfrenté.

En Xcode 7, cuando la aplicación se ejecuta en iOS 9 en dispositivos iPad, las celdas UITableView dejan un margen en el lado izquierdo de la vista de tabla. Y rotar el dispositivo al paisaje aumentaría los márgenes.

La solución que encontré es:

Establecer "cellLayoutMarginsFollowReadableWidth" en NO.

self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;

Dado que esta propiedad solo está disponible en iOS 9. Por lo tanto, tendrá que poner una condición para verificar la versión de iOS, de lo contrario se bloqueará.

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

Espero que sea útil para los demás.


readableContentGuide es una guía de diseño que ya se agregó a cada UIView

Esto es para garantizar que el usuario no tenga que girar la cabeza para leer el contenido.

Si desea seguir la guía de contenido legible, haga lo siguiente:

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

Nota: En el código de arriba, los anclajes inferior y superior usan contentView en lugar de readableContentGuide para que los márgenes verticales de contenido cambien en función de tableView.rowHeight .


La mejor solución para iOS 9 y superior

Esto se debe a una nueva característica llamada guías de contenido legible. Proporciona márgenes adecuados para la lectura. Entonces, en iPhone y iPad vertical son márgenes muy pequeños, pero en iPad horizontal son más grandes. En iOS 9, los márgenes de celda de UITableView predeterminan a seguir la guía de contenido legible.

Si desea detener eso, simplemente configure cellLayoutMarginsFollowReadableWidth de cellLayoutMarginsFollowReadableWidth en NO/false .

Fuente: https://forums.developer.apple.com/thread/5496


Solución perfecta hasta iOS 9

En vistaDidLoad

C objetivo

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

Rápido

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

En los métodos TableViewDelegate agregue el siguiente código:

C objetivo

- (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]; } }

Rápido

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 } }