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

时间:2013-05-18 22:40:51

标签: 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)]];
}

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

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

1 个答案:

答案 0 :(得分:15)

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

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

po [[UIWindow keyWindow] _autolayoutTrace]

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

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