2013-05-07 116 views
1

當我第一次加載我的視圖控制器時,我爲我的UINavigationBar設置了一些按鈕和一個標題。如果我以縱向加載屏幕,一切看起來都很棒。但是,如果我在橫向加載屏幕,按鈕僅佔用提供的部分空間。當我旋轉到縱向並再次回到橫向時,項目現在正確地展開以填充導航欄上的空間。UINavigationBar中的項目沒有填充屏幕寬度

NavBar本身是在故事板中手動添加的。它被設置爲自動調整和拉伸,並且Autoresize子視圖被選中。

我該怎麼做才能使其始終正確顯示導航欄?

相對設置代碼顯示如下。

UIBarButtonItem * saveBtn = [[UIBarButtonItem alloc] initWithTitle:@"Set" style:UIBarButtonItemStyleBordered target:self action:@selector(setField)]; 
UIBarButtonItem * cancelBtn = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelClicked:)]; 

UINavigationItem * buttonsItem = [[UINavigationItem alloc] init]; 


NSString * title = [self.data objectForKey:@"title"]; 
if(title){ 
    buttonsItem.title = title; 
} else { 
    buttonsItem.title = @"Default Title"; 
} 

[buttonsItem setLeftBarButtonItem:cancelBtn animated:YES]; 
[buttonsItem setRightBarButtonItem:saveBtn animated:YES]; 
[navBar setItems:[[NSArray alloc] initWithObjects: buttonsItem, nil] animated:YES]; 

附加信息: 一些額外的信息,我以前曾忘了提。

我不是通過賽格瑞加載該屏幕上,而不是我這樣做:

DiaryCalendarPickerViewController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"diaryCalendarForm"]; 
...   
[self presentViewController:navigationController animated:YES completion:nil]; 

最初加載到景觀

Initial load in landscape

旋轉爲縱向

Rotate to portrait

Rot吃回景觀

Rotate back to landscape

+0

你可以添加一些截圖嗎? – Undo 2013-05-07 20:25:56

回答

1

後你佈置你的看法,但設置導航項目之前嘗試調用

[buttonsItem.titleView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
+0

這些都不適合我。我不認爲UINavigationItem可以工作,因爲我手動添加了NAB欄。其他信息已添加到帖子中。 – cain 2013-05-08 13:18:52

+0

DiaryCalendarPickerViewController是否繼承自UINavigationController?如果有的話,爲什麼需要手動添加一個導航欄?用於設置條形按鈕項目的代碼應位於視圖的任何視圖的viewDidLoad中,並將其推送到導航控制器上。 – zimmryan 2013-05-08 14:40:03

+0

它從UIViewController繼承。我相信它沒有得到標準的NavBar,因爲它被呈現而不是被推送。 – cain 2013-05-08 15:15:21

0

我有同樣的問題恰好和您的評論該隱是正確的答案,對他們來說,有同樣的問題,解決它,但正確的酒吧按鈕或右側導航欄項的代碼到ViewDidAppear,它將像魅力一樣工作!

相關問題