uitableview fonts ios8 textcolor

UITableViewHeaderFooterView en iOS 8



fonts ios8 (4)

Estaba teniendo el mismo problema y terminé subclasando UITableViewHeaderFooterView.

Aquí hay una pequeña implementación de referencia: simplemente configure header.headerLabel.text = @"myString"; .

@interface BHRSectionHeaderView : UITableViewHeaderFooterView @property (nonatomic, strong) UILabel *headerLabel; @end @implementation BHRSectionHeaderView - (UILabel *)headerLabel { if (!_headerLabel) { _headerLabel = [[UILabel alloc] initWithFrame:CGRectZero]; _headerLabel.font = [UIFont boldSystemFontOfSize:13.f]; _headerLabel.textColor = [UIColor redColor]; _headerLabel.translatesAutoresizingMaskIntoConstraints = NO; [self addSubview:_headerLabel]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(16)-[header]-(>=0)-|" options:0 metrics:nil views:@{ @"header": _headerLabel }]]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=0)-[header]-(>=0)-|" options:0 metrics:nil views:@{ @"header": _headerLabel }]]; [self addConstraint:[NSLayoutConstraint constraintWithItem:_headerLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]]; } return _headerLabel; } @end

Tengo un UITableViewHeaderFooterView en el que cambio la fuente textLabel y el color de fondo

UITableViewHeaderFooterView* header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"header"]; if(!header) { header = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:@"header"]; [header.textLabel setFont:[UIFont boldSystemFontOfSize:15]]; [header.contentView setBackgroundColor:[UIColor colorWithRed:213/255.0 green:213/255.0 blue:213/255.0 alpha:1]]; }

Así es como lo muestra iOS 7:

Así es como iOS 8 lo muestra: El setFont: no parece tener efecto aquí, o la fuente 15pt es más grande en iOS 8 que en iOS 7

Así es como iOS 8 lo muestra cuando elimino setFont: call

Como puede ver, setFont no tiene ningún efecto en la fuente, pero sí en textColor.

¿Me estoy perdiendo algo o esos son "beta bugs" (estoy usando simuladores de XCode6 GM seed, y tengo el mismo problema en un iPhone 5 con iOS 8 beta 5)?

Editar: versión iOS 8 y XCode 6.0.1 no parece solucionar el problema


Basado en la respuesta de tubtub, hice una subclase UITableViewHeaderFooterView:

@interface CompatibilityTableViewHeaderFooterView : UITableViewHeaderFooterView @property (nonatomic,readonly) UILabel* compabilityTextLabel; @end @implementation CompatibilityTableViewHeaderFooterView { UILabel* iOS8TextLabel; NSLayoutConstraint* iOS8TextLabelLeftMarginConstraint; } -(instancetype) initWithReuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithReuseIdentifier:reuseIdentifier]) { self.contentView.backgroundColor = GRIS_213; self.compabilityTextLabel.font = [UIFont boldSystemFontOfSize:15]; } return self; } -(UILabel*) compabilityTextLabel { if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) { return self.textLabel; } else { if (!iOS8TextLabel) { iOS8TextLabel = [[UILabel alloc] init]; iOS8TextLabel.translatesAutoresizingMaskIntoConstraints = NO; [self addSubview:iOS8TextLabel]; iOS8TextLabelLeftMarginConstraint = [NSLayoutConstraint constraintWithItem:iOS8TextLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1 constant:0]; [self addConstraint:iOS8TextLabelLeftMarginConstraint]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[iOS8TextLabel]-(>=0)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(iOS8TextLabel)]]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[iOS8TextLabel]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(iOS8TextLabel)]]; } return iOS8TextLabel; } } -(UITableView*) searchForTableView { UIView* currentView = self; while (currentView) { currentView = currentView.superview; if ([currentView isKindOfClass:[UITableView class]]) { return (UITableView*)currentView; } } return nil; } -(void) layoutSubviews { [super layoutSubviews]; UITableView* tableView = [self searchForTableView]; if (tableView) { iOS8TextLabelLeftMarginConstraint.constant = tableView.separatorInset.left; } }

Así que, básicamente, ahora solo uso la propiedad textLabel lugar de textLabel . Tenga en cuenta que la restricción del espacio izquierdo se actualiza automáticamente para que coincida con el recuadro separador tableView. Siéntase libre de comentar / mejorar mi código;)


Puede modificar la fuente textLabel anulando el método -layoutSubviews:

- (void)layoutSubviews { self.textLabel.font = [UIFont boldSystemFontOfSize:15.0f]; self.textLabel.textAlignment = NSTextAlignmentCenter; self.textLabel.textColor = [UIColor grayColor]; [super layoutSubviews]; }


[Versión de SWIFT] Acaba de presentar el mismo problema en UITableView UITableViewStylePlain, es decir, la configuración de la fuente del encabezado en

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) {...}

no tiene efecto. Aquí hay un código de mi subclase de UITableViewController que funcionó para mí [probado con XCode 6.4, iOS 8.4], ver http://www.elicere.com/mobile/swift-blog-2-uitableview-section-header-color/

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { let header = view as? UITableViewHeaderFooterView //recast your view as a UITableViewHeaderFooterView if (header == nil) { return; } if (myHeaderFont != nil) { header!.textLabel.font = myHeaderFont; } }

La altura del encabezado debe ajustarse "manualmente":

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { if (myHeaderFont == nil) { return 20; //DEFAULT_HEADER_HEIGHT_IN_POINTS; } return myHeaderFont.pointSize * 2; //HEIGHT_REL_TO_FONT;

}

El resto fue estándar, pero muestra aquí para completar:

override func viewDidLoad() { //... //https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewHeaderFooterView_class/index.html#//apple_ref/doc/uid/TP40012241 self.tableView.registerClass(UITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "HEADER_REUSE_ID") //... } override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { var header = tableView.dequeueReusableHeaderFooterViewWithIdentifier("HEADER_REUSE_ID") as? UITableViewHeaderFooterView; if (header == nil) { header = UITableViewHeaderFooterView(reuseIdentifier: "HEADER_REUSE_ID"); } header!.textLabel.text = myTitle; return header!; }