2015-08-23 72 views
0

編輯:重新輸入相同的問題,使其更具體。iPhone 6的Xcode視圖的分辨率不一致

所以我在我的程序中有3個類。應用代理中包含:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.controller = [[InitialEdit alloc]initWithNibName:@"InitialEdit"]; 
self.window.rootViewController = self.controller; 

然後InitialEdit:

-(InitialEdit*) initWithNibName:(NSString*) xibName{ 
    self.menu = [[DropDownMenu alloc]initWithNibName:@"DropDownMenu" size:230]; 
    self.menu.view.frame = CGRectMake(0, 20, 0, 100); 
    self.menu.view.backgroundColor = [UIColor orangeColor]; 
    [self.view addSubview:self.menu.view]; 
    return [self initWithNibName:xibName bundle:nil]; 
} 

而且DropDownMenu - (DropDownMenu *)initWithNibName:(的NSString *)xibName大小:(INT){大小
// .. 。沒有相關的按鈕代碼和沒有框架變化

return [self initWithNibName:xibName bundle:nil]; 

    } 

因此,邏輯上,0寬度將使幀不可見,但寬度是大概55歲左右,我看到那種橙色。我該如何解決?

+0

很難說與給定的信息。你有我能看到的示例項目嗎? –

+0

請上傳描述您的場景的圖像或示例項目的鏈接 – Usama

+0

是否有使用筆尖名稱的自定義intiiazer的具體原因?你爲什麼不簡單地重寫提供'initWithNibName:bundle:'的系統並在那裏進行設置?該方法在繪製視圖之前被調用,因此它是設置的正確時刻。另外(我希望你知道這一點,但僅僅爲了清楚起見),你可以將自定義類分配給在Interface Builder中設計的視圖。 – Losiowaty

回答

0

我想說的問題就出在這行:return [self initWithNibName:xibName bundle:nil];

在你的代碼會發生什麼事,是你設置上self有些東西還沒有被完全初始化(意思,init鏈還沒有漲到NSObject),然後通過調用[self initWithNibName:xibName bundle:nil]返回一個全新的InitialEdit實例。

要做到這一點是正確的方法:

-(InitialEdit*) initWithNibName:(NSString*) xibName{ 
    self = [super initWithNibName:xibName bundle:nil]; 
    if (self) { 
     self.menu = [[DropDownMenu alloc]initWithNibName:@"DropDownMenu" size:230]; 
     self.menu.view.frame = CGRectMake(0, 20, 0, 100); 
     self.menu.view.backgroundColor = [UIColor orangeColor]; 
     [self.view addSubview:self.menu.view]; 
    } 

    return self; 
} 

當然,這是假設你沒有在你的類此改變initWithNibName:bundle:。即使如此,一般的經驗法則是,自定義初始化程序中的第一行應將self分配給其他初始化程序的結果,從而在某些時候調用super的初始化程序之一。

相關問題