我已经编写了一个简单的视图控制器程序,其中只有两个按钮。如果我采用老式的方式并为布局设置框架大小,则一切都很好。但是,如果我使用自动布局约束进行布局,则按钮显示完美,但它们不响应按下操作。它们甚至不会高亮显示。我的loadview方法如下所示,以使按钮无法正常工作。如果取消注释框架设置代码并注释掉约束添加,则按钮开始按预期响应按下操作。有人知道发生了什么吗?我希望将代码库中所有旧的硬编码布局转换为基于约束的布局,但似乎在第一个障碍处就失败了。
在viewDidAppear方法中,我打印了按钮的框架。它们给出了一些奇怪的值,我不知道是否相关。实际上,这些按钮是在屏幕中央并排显示的。
- (void)loadView {
self.view = [UIView new];
self.view.translatesAutoresizingMaskIntoConstraints = NO;
self.navigationItem.title = @"Landing Page";
UIButton *buildExercisesButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.buildExercisesButton = buildExercisesButton;
// buildExercisesButton.frame = CGRectMake(20, 312, 164, 44);
self.buildExercisesButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.buildExercisesButton setTitle:@"Build Exercises" forState:UIControlStateNormal];
[self.buildExercisesButton addTarget:self action:@selector(buildExercisesButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.buildExercisesButton];
UIButton *organiseExercisesButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.organiseExercisesButton = organiseExercisesButton;
// organiseExercisesButton.frame = CGRectMake(192, 312, 164, 44);
self.organiseExercisesButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.organiseExercisesButton setTitle:@"Organise Exercises" forState:UIControlStateNormal];
[self.organiseExercisesButton addTarget:self action:@selector(organiseExercisesButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.organiseExercisesButton];
NSDictionary *variables = NSDictionaryOfVariableBindings(buildExercisesButton, organiseExercisesButton);
NSArray *constraints =
[NSLayoutConstraint constraintsWithVisualFormat:@"|-[buildExercisesButton(organiseExercisesButton)]-[organiseExercisesButton]-|"
options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom
metrics:nil
views:variables];
[self.view addConstraints:constraints];
constraints =
[NSLayoutConstraint constraintsWithVisualFormat:@"V:[buildExercisesButton]-|"
options:0
metrics:nil
views:variables];
[self.view addConstraints:constraints];
}
在viewDidAppear方法中,我打印了按钮的框架。它们给出了一些奇怪的值,我不知道是否相关。实际上,这些按钮是在屏幕中央并排显示的。
buildExercisesButton: {{20, -63}, {164, 44}}
organiseExercisesButton: {{192, -63}, {164, 44}}