子视图中的UIButton在NSLayoutConstraint之后没有接收到触摸

Las*_*ing 5 ios autolayout

我有2个自定义UIViews,我正在添加到我的UIViewController,然后使用NSLayoutConstraint对齐它们.在UIViewController视图上应用NSLayoutConstraint后,自定义UIViews中的UIButtons不再接收触摸事件.

- (void)viewDidLoad
{
    [super viewDidLoad];

    navigationBar = [[DtNavigationBar alloc] initWithFrame:CGRectMake(0,0,320,45)];
    [navigationBar setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.view addSubview:navigationBar];

    switchBar = [[DtSwitch alloc] initWithFrame:CGRectMake(0,0,320,44)];
    [switchBar setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.view addSubview:switchBar];

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[navigationBar(45)]-0-[switchBar(44)]-(>=100)-|"
                                                                      options:NSLayoutFormatAlignAllLeft metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(switchBar, navigationBar)]];
}
Run Code Online (Sandbox Code Playgroud)

DtNavigationBar和DtSwitch都有UIButton视图仍然显示在正确的位置但不再响应触摸.

如果我删除addConstraints部分(并手动放置视图),那么按钮工作正常.

mat*_*att 15

问题是,在选择使用约束后,您没有使用足够的约束.你的布局模糊不清.

要测试此假设,请运行应用程序,然后在调试器中暂停并在lldb控制台中输入:

po [[UIWindow keyWindow] _autolayoutTrace]
Run Code Online (Sandbox Code Playgroud)

AMBIGUOUS LAYOUT这个词会出现在回复的某个地方.

你需要足够的约束才能使这些词语消失.您必须完全确定故事中所有内容的垂直和水平位置以及宽度高度.