2012-03-13 3 views
6

Когда я нажимаю новый tableViewController из стартового экрана приложения IOS (я нажимаю Настройки экрана) заголовок в UINavigationController не получает обрезан до анимации отделки:UINavigationBar названия отсекается при смене viewControllers

enter image description here

то есть в середине Панели навигации в анимации, и как раз перед анимацией отделки, это выглядит следующим образом:

enter image description here

После утра Название изменено правильно в «Настройки». Это неважно, но вы можете себе представить, насколько это беспокоит программиста, немного подверженного OCD! :)

Вот код в tableViewController, где я дал название, ничего особенного:

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     self.title = @"Settings"; 
     // Hide tabBar when pushed so you cannot switch from the Settings 
     self.hidesBottomBarWhenPushed = YES; 
     self.tableView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"bg.png"]]; 
    } 
    return self; 
} 
+2

У меня тоже есть эта досадная проблема. В моем случае я использую специальный шрифт для заголовка навигации и устанавливаю его с помощью setTitleTextAttributes: forState: это не происходит, если я его не изменю. Кроме того, эта проблема возникает в iOS6. Мне бы хотелось найти работу, поэтому я начал щедрость, чтобы привлечь внимание ... –

+0

Можете ли вы поместить bg.png на Dropbox или аналогичный? –

+0

Вы подклассифицировали любое из следующего: 'UINavigationBar',' UINavigationItem', 'UINavigationController'? – Ander

ответ

1

Я немного опоздал с ответом, но я выяснил проблему на iOS 5. Когда вы используете прокси UIAppearance на UINavigationBar, вам нужно явно установить размер шрифта, вместо того, чтобы использовать 0.0, чтобы он автоматически на основе ориентации.

я был в состоянии исправить это подклассов UINavigationController и положить в следующий код:

- (void)viewWillLayoutSubviews { 
    [super viewWillLayoutSubviews]; 

    // You should include a conditional here to check for iOS 5, so iOS 6 doesn't have to do any additional work 
    self.navigationBar.titleTextAttributes = @{ 
     UITextAttributeFont:[UIFont boldSystemFontOfSize:UIInterfaceOrientationIsPortrait(self.interfaceOrientation) || IS_IPAD ? 20.0f : 16.0f], 
     UITextAttributeTextColor:[UIColor whiteColor], 
     UITextAttributeTextShadowColor:[UIColor colorWithWhite:0.0f alpha:0.5f], 
     UITextAttributeTextShadowOffset:[NSValue valueWithUIOffset:UIOffsetMake(0.0f, -1.0f)] 
    }; 
} 
+0

Да, помещая размер шрифта в твердое кодированное значение, исправлена ​​проблема. Это был предыдущий код: '[[UINavigationBar внешний вид] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName: @ "Akzidenz-Гротеск BQ" Размер: 0,0], UITextAttributeFont, ноль]];' и я просто изменил размер шрифта на фиксированное значение: '[[UINavigationBar внешний вид] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName: @ "Akzidenz-Гротеск BQ" размер: 22,0], UITextAttributeFont, ноль]];' Works как очарование. Благодаря! –

0

попробуйте установить

self.navigationItem.title = self.title; 

в методе viewWillAppear

0

попробовать

- (void)viewWillAppear:(BOOL)animated { 

    self.title = @"Settings"; 
} 
+1

Как в сторону, в соответствии с [документацией] (http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/viewWillAppear :), «[i] вы переопределите этот метод, вы должны назвать супер в какой-то момент своей реализации». – Rob

Смежные вопросы