5

UIViewController に追加し、NSLayoutConstraint を使用してそれらを整列させる 2 つのカスタム UIView があります。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 部分を削除すると(そしてビューを手動で配置すると)、ボタンは正常に機能します。

4

1 に答える 1

15

問題は、制約を使用することを選択したにもかかわらず、十分な制約を使用していないことです。あいまいなレイアウトがあります。

この仮説をテストするには、アプリを実行し、デバッガーで一時停止して、lldb コンソールに次のように入力します。

po [[UIWindow keyWindow] _autolayoutTrace]

AMBIGUOUS LAYOUT という単語が応答のどこかに表示されます。

それらの言葉をなくすには、十分な制約が必要です。ストーリー内のすべてのものの縦横の位置高さを完全に決定する必要があります。

于 2013-05-18T22:49:55.873 に答える