2013-10-09 74 views
2

我有一個自定義的UIViewController,它創建一個視圖,該視圖包含頂部(帶有4個按鈕的視圖),tableview和tableview下的另一個視圖的操作欄。佈局完成所有代碼並且不使用自動佈局。 一切在iOS 7.0和7.0.2的各種設備上都能正常工作,但在模擬器中,控制器的根視圖會固定在屏幕的右上角(0,0),而不是在導航欄下方。運行iOS7模擬器UIViewController視圖尺寸不正確

我要迫使繼電器輸出,在vi​​ewDidAppear:方法,但是這看起來像是一個黑客...

感謝任何見解

enter image description here 編輯:增加了圖像。你可以看到突出顯示的UIView。正如ManicMonkOnMac提到的,UIView是在工具欄下的(但這隻發生在模擬器中,在設備上,視圖排隊很好) 在控制器的loadView方法中,我在創建視圖時設置了框架:

- (void)loadView 
{ 
    // Our parent view controller will resize us appropriately. The size set 
    // here is a convenience for initial view layout. 
    self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; 
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
} 

但是這個框架後來改變了。不是我的代碼,雖然,但通過UIKit的代碼)

EDIT2:addded的loadView方法體

+1

屏幕截圖會更好地理解這個問題 – Cintu

回答

3

編輯:通過WWDC 2013屆201去後,我覺得我有解決方案。

在iOS 7中,您可以在視圖控制器上設置屬性,以指定是否希望視圖與導航欄重疊。

viewController.edgesForExtendedLayout = UIRectEdgeNone;//UIRectEdgeAll specifies that nav bars should overlap the view. 

不同於iOS 6的,導航欄被放置在視圖在IOS 7.

使用幀尺寸排除導航欄。

代碼:

的CGRect幀= CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y + self.navigationController.navigationBar.frame.size.height,self.view .frame.size.width,self.view.frame.size.height);

CustomView * view = [[CustomView alloc] initWithFrame:frame];

[self.view addSubview:view];

+0

但是爲什麼它會在設備上工作,而不是模擬器?另外,我如何獲得排除導航欄的框架大小?並且現在我沒有在代碼中設置視圖的大小,它是由窗口 – otusweb

+0

自動設置以響應您的編輯,只需使用上述方法加載視圖而不是視圖控制器。 – ManicMonkOnMac

+0

對不起,我不知道你上面提到的是哪一種方法,或者你是指加載視圖而不是控制器,因爲我從頭開始實現一個視圖。謝謝你的幫助 – otusweb