Я создаю приложение, где я хочу полностью избежать использования Storyboard и Interface Builder в целом, поэтому весь пользовательский интерфейс должен быть указан в коде. Я использую PureLayout, хороший API для настройки ограничений AutoLayout
.
Тем не менее, моя проблема в том, что кажется, что AutoLayout
отключен, если не используется Interface Builder. updateViewConstraints
, метод, в котором я помещал макет в соответствии с рекомендацией автора PureLayout
, вообще не вызывается.
Просто чтобы немного узнать о моей настройке:
- удален
Main.storyboard
и удалил запись из моегоInfo.plist
- вручную установите
self.window
вAppDelegate.m
и добавьтеUINavigationController
с помощьюMainMainController
в качествеrootViewController
Как уже упоминалось, моя основная проблема заключается в том, что updateViewConstraints
не вызывается на MainViewController
, но все элементы интерфейса отображаются с помощью frame
, который я передал им во время инициализации.
Примечание. Мне кажется, мне просто нужно включить некоторый флаг где-нибудь, чтобы имитировать флажок из Interface Builder, с помощью которого вы можете указать, хотите ли вы использовать 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