2015-04-08 3 views
2

Мне было интересно, какой лучший подход сделать, чтобы заголовок автомата UINavigationBar автоматически уменьшался до минимального размера шрифта, когда он слишком длинный?Заголовок автошины навигация Заголовок iOS 7 или более поздней версии

Ниже мой пример задачи

Normal

enter image description here

слишком долго (нужно сжать ярлык)

enter image description here

И здесь я S коды я использую, чтобы сделать укладку для UINavigationBar

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor greenColor]] 
            forBarMetrics:UIBarMetricsDefault]; 

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 

[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor], 
                 NSFontAttributeName    : [fontWithName:@"Helvetica-Bold" size:18.0]}]; 

[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin]; 
+0

Вы видели это? http://stackoverflow.com/a/14962409/22147 –

ответ

3

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

Например (Put это в viewDidLoad вашего UIViewController):

UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0, 200, 40)]; 
titleLabel.text = @"Your very long title"; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.adjustsFontSizeToFitWidth = YES; // As alternative you can also make it multi-line. 
titleLabel.minimumScaleFactor = 0.5;  
self.navigationItem.titleView = titleLabel; 
Смежные вопросы