Заголовок UINavigationbar отключается при использовании titleTextAttributes

У моего iPhone-приложения есть контроллер панели вкладок, и на каждой вкладке (4 вкладки) есть UINavigationController, который я хочу быть другим цветом и изменить шрифт на заголовке, поэтому я сделал свой собственный пользовательский контроллер навигации для использования везде поэтому эти изменения только в 1 месте. Тон легко и отлично работает, но когда я пытаюсь установить шрифт с помощью setTitleTextAttributes, он меняет шрифт, но в некоторых представлениях заголовок отображается в конце (т.е. "Мой титл..." ). Если я меняю виды, а затем возвращаюсь к виду с отключенным заголовком, заголовок действительно отображается правильно.

В настоящее время мой viewDidLoad в моем пользовательском UINavigationController имеет:

UIFont *font = [UIFont fontWithName:@"GillSans-Bold" size:22];
NSDictionary *attr = [[NSDictionary alloc] initWithObjectsAndKeys:font, UITextAttributeFont, nil];
[self.navigationBar setTitleTextAttributes:attr];

Моя мысль заключалась в том, что он менял шрифт titleView, но не изменялся в соответствии с новым размером (так как это более крупный шрифт). Другая проблема заключается в том, что телефон поворачивается на пейзаж, любые буквы, которые висят низко (g, p, y), отсекаются. Есть ли способ изменить размер метки или разрешить установку minimumFontSize, чтобы текст просто сжимался, когда он слишком большой?

Ответы

Ответ 1

Это сработало для меня

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self setTitle:self.station.title];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 400, 44)];
    label.backgroundColor = [UIColor clearColor];
    [label setFont:[UIFont fontWithName:@"GillSans-Bold" size:24.0]];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor whiteColor];
    label.adjustsFontSizeToFitWidth = YES;
    label.text = self.title;    
    self.navigationItem.titleView = label;
}

Ответ 2

Я думаю, что эта проблема w.r.t rootviewcontroller. Строка вкладок определена в вашем корневом контроллере справа?

Оттуда, если вы нажмете и нажмете через навигационные контроллеры - все содержимое будет таким же, независимо от навигации.

Ответ 3

Это сработало для меня:

+ (void)setNavBarTitle:(NSString *)title forUINavigationItem:(UINavigationItem*)navigationItem
{
    UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:24];
    label.textAlignment = UITextAlignmentCenter;
    label.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
    label.textColor = [UIColor whiteColor];
    label.adjustsFontSizeToFitWidth = YES;
    label.text = title;
    [label sizeToFit];
    navigationItem.titleView = label;
}