Центрирование метки по вертикали в UINavigationBar TitleView - PullRequest
7 голосов
/ 29 марта 2012

У меня нет особой удачи по центру по вертикали надписи, которую я добавляю в TitleView на UINavigationBar.Вы можете увидеть, как это выглядит ниже.

Text not vertically aligned

Вот как я добавляю ярлык:

UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.text = NSLocalizedString(@"activeSessionsTitle",@"");
titleLabel.font = [Util SETTING_NEO_HEADER_FONT];
titleLabel.textColor = [UIColor whiteColor];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.textAlignment = UITextAlignmentCenter;
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f];
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f);
[titleLabel sizeToFit];

super.navigationItem.titleView = titleLabel;

Я думаю, почему это происходитэто что-то странное с фактическим шрифтом, который я использую - так как мне пришлось много переставлять внутри кнопок и тому подобное.Я смог решить эту проблему везде, кроме панели навигации.

Ответы [ 4 ]

28 голосов
/ 01 января 2013

Открытие старого Вопроса, но я нашел это очень полезным.

iOS 5 позволяет использовать [UINavigationBar appearance], что отлично подходит для изменения вида заголовка в строке заголовка без необходимости настраиваемого UIView:

[[UINavigationBar appearance] setTitleTextAttributes:
         [NSDictionary dictionaryWithObjectsAndKeys:
          [UIColor redColor],
          UITextAttributeTextColor,
          [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],
          UITextAttributeTextShadowColor,
          [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
          UITextAttributeTextShadowOffset,
          [UIFont fontWithName:@"HelveticaNeue" size:25.0f],
          UITextAttributeFont,
          nil]];

Иногда, в зависимости от используемого вами UIFont, вид заголовка может быть выключен вертикально.

Чтобы исправить это, вы можете использовать:

[self.navigationBar setTitleVerticalPositionAdjustment:(float) forBarMetrics:UIBarMetricsDefault];

(float) - положительное значение, чтобы подтолкнуть titleView, и отрицательное значение, чтобы подтолкнуть titleView.

Надеюсь, это поможет.

11 голосов
/ 29 марта 2012

В итоге я использовал комбинацию оборотов в минуту слева и одного из комментариев на мой вопрос. Вот что в конечном итоге исправило это для меня:

UIView *customTitleView = [[UIView alloc] init];
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 3.0f, 200.0f, 30.0f)];
titleLabel.text = titleString;
titleLabel.font = [Util SETTING_NEO_HEADER_FONT];
titleLabel.textColor = [UIColor whiteColor];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.textAlignment = UITextAlignmentCenter;
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f];
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f);
[titleLabel sizeToFit];

customTitleView.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height);

[customTitleView addSubview:titleLabel];
[titleLabel release];

[self.navigationItem setTitleView:customTitleView];
[customTitleView release];

Если вы используете этот кусок кода, вам, возможно, придется поиграть со значением "y" в заголовке метки заголовка initWithFrame: call. У меня установлено значение 3.0f, но вам, возможно, придется немного его настроить для собственного использования.

Причина, по которой другие решения, похоже, не работают для меня, заключается в том, что они будут отклоняться от центра по горизонтали в зависимости от того, была ли у меня одна кнопка (слева или справа). Если бы не было кнопок панели, это было бы хорошо, и если бы было две, это было бы хорошо. Но это может привести к смещению центра.

1 голос
/ 29 марта 2012

Не думаю, что это как-то связано с вашим шрифтом. Я также использовал titleView, и я думаю, что то, как оно выглядит, странным образом не учитывает размер вашего представления.

Вы также можете установить рамку вида этикетки как таковую

titleLabel.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height);

self.navigationItem.titleView = titleLabel;
0 голосов
/ 15 сентября 2015
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName:UIFont(name:"Exo2-Bold", size: 18) as! AnyObject,NSForegroundColorAttributeName:UIColor.whiteColor()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...