iphone uinavigationcontroller title uinavigationitem subtitle

Título y subtítulo del iPhone en la barra de navegación



uinavigationcontroller title (2)

Convierta las etiquetas titleView y titleView en las propiedades del controlador de vista, de modo que pueda acceder a ellas desde cualquier método. Luego, en la rotación del controlador de vista, cambie el tamaño de las etiquetas:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [self adjustLabelsForOrientation:toInterfaceOrientation]; } - (void) adjustLabelsForOrientation:(UIInterfaceOrientation)orientation { if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) { titleView.font = [UIFont boldSystemFontOfSize:16]; subtitleView.font = [UIFont boldSystemFontOfSize:11]; } else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) { titleView.font = [UIFont boldSystemFontOfSize:20]; subtitleView.font = [UIFont boldSystemFontOfSize:13]; } }

En mi aplicación, me gustaría que la barra de navegación muestre un título y subtítulo.

Hasta ese punto, agregué el siguiente código a mi controlador de vista:

// Replace titleView CGRect headerTitleSubtitleFrame = CGRectMake(0, 0, 200, 44); UIView* _headerTitleSubtitleView = [[[UILabel alloc] initWithFrame:headerTitleSubtitleFrame] autorelease]; _headerTitleSubtitleView.backgroundColor = [UIColor clearColor]; _headerTitleSubtitleView.autoresizesSubviews = YES; CGRect titleFrame = CGRectMake(0, 2, 200, 24); UILabel *titleView = [[[UILabel alloc] initWithFrame:titleFrame] autorelease]; titleView.backgroundColor = [UIColor clearColor]; titleView.font = [UIFont boldSystemFontOfSize:20]; titleView.textAlignment = UITextAlignmentCenter; titleView.textColor = [UIColor whiteColor]; titleView.shadowColor = [UIColor darkGrayColor]; titleView.shadowOffset = CGSizeMake(0, -1); titleView.text = @""; titleView.adjustsFontSizeToFitWidth = YES; [_headerTitleSubtitleView addSubview:titleView]; CGRect subtitleFrame = CGRectMake(0, 24, 200, 44-24); UILabel *subtitleView = [[[UILabel alloc] initWithFrame:subtitleFrame] autorelease]; subtitleView.backgroundColor = [UIColor clearColor]; subtitleView.font = [UIFont boldSystemFontOfSize:13]; subtitleView.textAlignment = UITextAlignmentCenter; subtitleView.textColor = [UIColor whiteColor]; subtitleView.shadowColor = [UIColor darkGrayColor]; subtitleView.shadowOffset = CGSizeMake(0, -1); subtitleView.text = @""; subtitleView.adjustsFontSizeToFitWidth = YES; [_headerTitleSubtitleView addSubview:subtitleView]; _headerTitleSubtitleView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); self.navigationItem.titleView = _headerTitleSubtitleView;

Y también implementó un método:

-(void) setHeaderTitle:(NSString*)headerTitle andSubtitle:(NSString*)headerSubtitle { assert(self.navigationItem.titleView != nil); UIView* headerTitleSubtitleView = self.navigationItem.titleView; UILabel* titleView = [headerTitleSubtitleView.subviews objectAtIndex:0]; UILabel* subtitleView = [headerTitleSubtitleView.subviews objectAtIndex:1]; assert((titleView != nil) && (subtitleView != nil) && ([titleView isKindOfClass:[UILabel class]]) && ([subtitleView isKindOfClass:[UILabel class]])); titleView.text = headerTitle; subtitleView.text = headerSubtitle; }

Las cosas funcionan muy bien, gracias.

Excepto que al girar el iPhone a modo horizontal, el título + subtítulo no se reduce de forma automática como el título predeterminado del elemento de navegación.

Cualquier punteros?

¡Gracias!


En lugar de esta máscara autorizante

_headerTitleSubtitleView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);

Deberías usar

_headerTitleSubtitleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; subtitleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;