ios – UIButton在使用自动布局时停止工作

我用编程方式组装了一个简单的视图控制器,上面只有两个按钮.如果我去学校并为布局设置框架大小,那么一切都很好.但是,如果我对布局使用自动布局约束,则按钮显示完美,但它们不响应按下.他们甚至没有强调.我的loadview方法在下面的形式,使按钮不起作用.如果取消注释框架设置代码添加注释的约束,则按钮开始按预期响应按下.有谁知道发生了什么事?我希望将我的代码库中所有旧的硬编码布局转换为基于约束的,但似乎是在第一个障碍下降.
- (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,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,44}}

解决方法

您需要为要添加按钮的视图定义约束,或将translatesAutoresizingMaskIntoConstraints属性设置为YES.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...