Cómo colocar las subvistas en el lugar correcto para diferentes pantallas

Estoy desarrollando un ViewController con algunos elementos de interfaz de usuario como SubViews pero tengo problemas con estos elementos cuando ejecuto la aplicación en diferentes dispositivos. Estoy haciendo todo por el código. ¿Debería usar AutoLayout ? ¿Cómo debo usar la reproducción automática para estos elementos?

iphone5 (4 pulgadas)

iphone 4 (3,5 pulgadas)

Tengo estos elementos:

  titleLbl = [[WPCustomLabel alloc] initWithFrame:CGRectMake(30, self.view.frame.size.height/2, 260, 25)]; [titleLbl setFont:[UIFont systemFontOfSize:18]]; [self.view addSubview:titleLbl]; NSLog(@"%f", self.view.bounds.size.height/2); textLbl = [[WPCustomLabel alloc] initWithFrame:CGRectMake(40, self.view.frame.size.width/2 + 10, 250, 230)]; [textLbl setTextAlignment:NSTextAlignmentJustified]; [self.view addSubview:textLbl]; omitBtn = [[WPCustomButton alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height-108 , self.view.bounds.size.width/2, 44)]; [omitBtn setTitle:@"Omitir" forState:UIControlStateNormal]; [omitBtn addTarget:self action:@selector(omitInfo) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:omitBtn]; nextBtn = [[WPCustomButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height-108, self.view.frame.size.width/2, 44)]; [nextBtn setTitle:@"Siguiente" forState:UIControlStateNormal]; [nextBtn addTarget:self action:@selector(omitInfo) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:nextBtn]; 

Si está utilizando storyboards, sí, debería usar autolayout. Simplemente establezca una restricción entre las tags y la parte inferior de la supervisión.

introduzca la descripción de la imagen aquí

Si no está utilizando storyboards, puede replace viewWillLayoutSubviews y establecer el layout según el tamaño de su vista.

Personalmente, doy consejos para no usar el layout automático, pero usé este código

 if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { if ([[UIScreen mainScreen] bounds].size.height == 480) { //iPhone 4 }else{ //iPhone } }else{ //iPad } 

este código define por separado todo el marco del object.