ios - AutoLayout sin uso de Storyboards o Interface Builder
objective-c pure-layout (0)
Estoy construyendo una aplicación en la que quiero evitar por completo el uso de Storyboard y el Interface Builder en general, por lo que toda la interfaz de usuario debe especificarse en el código. Estoy usando PureLayout , una buena API para configurar restricciones de AutoLayout
.
Sin embargo, mi problema es que parece que AutoLayout
está deshabilitado cuando no se usa Interface Builder. updateViewConstraints
, el método donde pongo el diseño de acuerdo con la recomendación dada por el autor de PureLayout
, no se llama en absoluto.
Solo para dar un poco más de información sobre mi configuración:
- eliminó
Main.storyboard
y eliminó la entrada de miInfo.plist
- configuró manualmente
self.window
enAppDelegate.m
y agregóUINavigationController
conMainMainController
comorootViewController
Como mencioné, mi principal problema es que no se llama a MainViewController
en MainViewController
pero los elementos de la UI se muestran todos con los frame
que les pasé durante la inicialización.
Nota : me parece que solo necesito habilitar alguna bandera en algún lugar para imitar la casilla de verificación de Interface Builder con la que puede indicar si desea usar AutoLayout
.
MainViewController.m
@interface MainViewController ()
@property (nonatomic, strong) UIButton *startButton;
@property (nonatomic, assign) BOOL didSetupConstraints;
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:self.startButton];
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
}
- (UIButton *)startButton
{
if (!_startButton) {
UIButton *startButton = [UIButton buttonWithType:UIButtonTypeSystem];
CGRect startButtonFrame = CGRectMake(75.0, 75.0, 250.0, 44.0);
startButton.frame = startButtonFrame;
[startButton setTitle:@"Start" forState:UIControlStateNormal];
[startButton setTranslatesAutoresizingMaskIntoConstraints:NO];
_startButton = startButton;
}
return _startButton;
}
- (void)updateViewConstraints
{
NSLog(@"Update view contraints");
if (!self.didSetupConstraints) {
[self.startButton autoCenterInSuperview];
self.didSetupConstraints = YES;
}
[super updateViewConstraints];
}
@end