2012-06-24 67 views
1

我有一個用於UINavigationController的視圖,並且按照預期自動按下以適應窗口。不過,我需要提出了同樣的觀點作爲一種模式,它並沒有一個UINavigationController(或需要一個),所以我只需要添加一個UINavigationBar的,像這樣:iOS UINavigationBar移位視圖下移

if (presentedAsModal == YES) { 
    UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    [self.view addSubview:navigationBar]; 

    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonSystemItemDone target:nil action:@selector(dismissModalViewControllerAnimated:)]; 

    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"]; 
    item.leftBarButtonItem = leftButton; 
    item.hidesBackButton = YES; 
    [navigationBar pushNavigationItem:item animated:NO]; 

    [[UIBarButtonItem appearance] setTintColor:[UIColor colorWithRed:0/255.0f green:180/255.0f blue:220/255.0f alpha:1.f]]; 
    [[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:0/255.0f green:140/255.0f blue:180/255.0f alpha:1.f]]; 
    } 

然而,的導航欄不會自動下推VC它最終會覆蓋我的視圖的一部分。有沒有辦法讓VC調整大小,以便在添加navigationBar後適合新的可用空間(我不想手動執行此操作)。

回答

2

您可以嵌入模態呈現導航控制器內的VC或做小動作修改邊界產地:

CGRect bounds = self.bounds; 
bounds.origin.y = -44; 
self.bounds = bounds; 
... 
UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, -44, 320, 44)]; 
... 
+0

這工作,我希望能有一個乾淨的財產我可以訪問做到這一點,但我可能不會?我知道我可以把它放在NavController中,但它看起來是錯誤的,因爲我不需要NavController只是看起來/後退按鈕欄。 – KDM

+0

導航控制器在將視圖添加到其視圖之前使其視圖更小,因此不存在「導航欄收縮行爲」。導航欄就像其他事物一樣是一個視圖/控件 –