6

次のメソッドで左バー ボタン アイテムを作成します。

- (void)leftButtonOnNavigationItem:(NSString *)imageName type:(NSInteger)type
{
    UIImage *backImg = [UIImage imageNamed:imageName];
    UIButton *backBtn = [[UIButton alloc] initWithFrame:CGRectMake(0.f, 0.f, backImg.size.width, backImg.size.height)];
    if (type == 0)
        [backBtn addTarget:self.navigationController action:@selector(pop) forControlEvents:UIControlEventTouchUpInside];
    else
        [backBtn addTarget:self action:@selector(leftMake) forControlEvents:UIControlEventTouchUpInside];
    backBtn.contentMode = UIViewContentModeCenter;
    [backBtn setImage:backImg forState:UIControlStateNormal];
    UIView *backBtnView = [[UIView alloc] initWithFrame:backBtn.bounds];
    backBtnView.bounds = CGRectOffset(backBtnView.bounds, -6, 0);
    [backBtnView addSubview:backBtn];
    UIBarButtonItem *backBarBtn = [[UIBarButtonItem alloc] initWithCustomView:backBtnView];
    self.navigationItem.leftBarButtonItem = backBarBtn;
}

ボタンに CGRectOffset を使用すると機能しないため、ビューにボタンを追加する必要があります。したがって、この場合、UIViewController の 1 つにある私のボタンが表示されます

ここに画像の説明を入力

だからそれは私が欲しいものです。しかし、UIBarButton は UIBarButton (四角形の領域) でのみクリックされ始めました。しかし、UIBarButtonItem にボタンのみを追加すると、画面に表示される UINavigationBar の領域をクリックしても機能します。

次のようなボタンを追加します。

- (void)leftButtonOnNavigationItem:(NSString *)imageName type:(NSInteger)type
{
    UIImage *backImg = [UIImage imageNamed:imageName];
    UIButton *backBtn = [[UIButton alloc] initWithFrame:CGRectMake(0.f, 0.f, backImg.size.width, backImg.size.height)];
    if (type == 0)
        [backBtn addTarget:self.navigationController action:@selector(pop) forControlEvents:UIControlEventTouchUpInside];
    else
        [backBtn addTarget:self action:@selector(leftMake) forControlEvents:UIControlEventTouchUpInside];
    backBtn.contentMode = UIViewContentModeCenter;
    [backBtn setImage:backImg forState:UIControlStateNormal];
//    UIView *backBtnView = [[UIView alloc] initWithFrame:backBtn.bounds];
//    backBtnView.bounds = CGRectOffset(backBtnView.bounds, -6, 0);
//    [backBtnView addSubview:backBtn];
    UIBarButtonItem *backBarBtn = [[UIBarButtonItem alloc] initWithCustomView:backBtn];//View];
    self.navigationItem.leftBarButtonItem = backBarBtn;
}

そして今、私のボタンはこのように表示されます

ここに画像の説明を入力

したがって、CGRectOffset は機能せず、私の UIBarButton は画面の左側に非常に近いですが、画面に表示されるナビゲーション バーのすべての領域をタップすると正常に機能します。そのため、ナビゲーションバーのすべての領域に触れることができ、UIBarButton は正常に動作します

だから私は必要です: UIBarButton は、最初のケースのように、左側からより多くの領域を表示する必要があります。ただし、ボタンだけでなく、すべてのサラウンドが2番目のケースのようにクリックするだけで動作する必要があります。私がしなければならないこと?

編集 最初のケースでは、次の領域をタップするとボタンがクリックされました

ここに画像の説明を入力

2番目のケースでは、次の領域をタップするとボタンがクリックされました

ここに画像の説明を入力

最初のケースのようにボタンの位置が必要ですが(左側からorigin.xが増えます)、2番目のケースのようにクリック可能な領域が必要です

4

4 に答える 4

0

使用済みのアクセシビリティ フレームで修正しました。高さと幅を増やしたボタンのアクセシビリティフレームを設定するだけで機能します。

于 2019-07-15T10:07:58.923 に答える