UInavigationBarのleftBarButtonItemのクリック範囲が大きすぎるという問題を解決する

2519 ワード

最近かわいいテストMMが次の質問をしてくれて、ナビゲーションバーleftBarButtonItemがButtonをカスタマイズするとき、ボタンの実際のクリック範囲が大きすぎます.出力ボタンのframeは正常なサイズですが.そこでインターネットで調べて解決策を見つけて、記録しました.
**実はbuttonを同じサイズのviewに追加します
UIImage *backImg = [UIImage imageNamed:imageName];
    UIButton *backBtn = [[UIButton alloc] initWithFrame:CGRectMake(0.f, 0.f, backImg.size.width, backImg.size.height)];

    [backBtn setImage:backImg forState:UIControlStateNormal];
    UIView *backBtnView = [[UIView alloc] initWithFrame:backBtn.bounds];
    backBtnView.bounds = CGRectOffset(backBtnView.bounds, 0, 0);
    [backBtnView addSubview:backBtn];
    UIBarButtonItem *backBarBtn = [[UIBarButtonItem alloc] initWithCustomView:backBtnView];
    self.navigationItem.leftBarButtonItem = backBarBtn;

緊急更新さっきテストしたところ、上の方法が間欠的に機能していることがわかりました。そこで、もう一つの方法を見つけました。


navigationBarのuserInteractionEnabledをNOに設定すればこのような問題は存在しないことに気づいたので、この問題を解決するカテゴリを構築することができます.
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    if ([self pointInside:point withEvent:event]) {
        self.userInteractionEnabled = YES;
    } else {
        self.userInteractionEnabled = NO;
    }

    return [super hitTest:point withEvent:event];
}

この方法をテストしたほうが頼りになる.インプリメンテーションコード現在アドレス