iPhone 6的Xcode视图分辨率不一致



编辑:重新输入相同的问题,使其更具体。

我的程序中有3个类。App Delegate包含:

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 size:(int)size{
//……没有相关的按钮代码,没有帧变化

 return [self initWithNibName:xibName bundle:nil];
  }

所以从逻辑上讲,宽度为0会使框架不可见,但宽度为~55左右,我看到的是橙色。我该如何解决这个问题?

我认为问题出在这一行: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赋值给其他初始化器的result,从而在某个时候调用super的一个初始化器。

最新更新