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