我有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部分(并手动放置视图),那么按钮工作正常。
答案 0 :(得分:15)
问题是,在选择使用约束时,您没有使用足够的约束。你的布局模糊不清。
要测试此假设,请运行应用程序,然后在调试器中暂停并在lldb控制台中输入:
po [[UIWindow keyWindow] _autolayoutTrace]
AMBIGUOUS LAYOUT这个词会出现在回复的某个地方。
你需要足够的限制才能使这些词语消失。您必须完全确定故事中所有内容的垂直和水平位置和宽度和高度。