2016-05-06 37 views
2

我正試圖改變導航控制器中UIBarButtonItem的選擇區域。基本上我試圖改變允許區域,使UIBarButtonItem可選。現在,我的UIBarButtonItem的尺寸是40x40,但即使我的手指沒有觸摸按鈕,我也可以輕鬆選擇它。如何更改UIBarButtonItem的選擇區域?

下面就來說明我的意思:

enter image description here

綠色代表UIBarButtonItem的大小。紅色代表允許選擇UIBarButtonItem的區域。

如何更改紅色區域的寬度?

下面是一個代碼片段,如果有幫助的:

changeMuscleMap = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 40)) 
changeMuscleMap.setImage(UIImage(named: "change"), forState: .Normal) 
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: changeMuscleMap) 

謝謝!

回答

-3

我是能夠實現通過這裏使用@Damien Romito的提供答案我想要的東西:

UINavigationBar UIBarButtonItems much larger click area than required

更新了雨燕3.0:

let buttonContainer: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 27, height: 30)) 

let barButton: UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30)) 

buttonContainer.addSubview(barButton) 

barButton = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 

barButton(#imageLiteral(resourceName: "image"), for: UIControlState.normal) 

self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: buttonContainer) 

barButton(self, action: #selector(ViewController.doSomething), for: UIControlEvents.touchUpInside) 
-1

可以通過製作帶有自定義項目的UIBarButtonItem而不是UIButton來實現。嘗試下面的代碼。我希望這會現在解決它。

changeMuscleMap = UIImageView(image:UIImage(named: "change")) 
imageView.frame = CGRectMake(0, 0, 40, 40) 
let leftBarBtn = UIBarButtonItem(customView: imageView) 
self.navigationItem.leftBarButtonItem = leftBarBtn 
+1

你的建議解決方法,而不是解決方案,這是不相干的我問題不管 – Pangu

+0

對不起你的問題的曲解。我現在編輯了我的答案來解決問題。我希望這有幫助。 –

0

您可以使用以下代碼來增加或減少UIBarButtonItem按鈕的寬度。

changeMuscleMap = UIButton(frame: CGRect(x: 0, y: 0, width: 120, height: 40)) 
changeMuscleMap.setImage(UIImage(named: "change"), forState: .Normal) 
changeMuscleMap.contentHorizontalAlignment = .left 
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: changeMuscleMap) 
0

如果你想比需要更大的點擊區域,嘗試下面的代碼,然後又做了的UIBarButtonItem使用自定義按鈕:

@implementation CustomButton 

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event 
{ 
    UIEdgeInsets extendTouchInsets = UIEdgeInsetsMake(20, 0, 20, 0); 
    CGRect bounds = self.bounds; 
    bounds.origin.x -= extendTouchInsets.left; 
    bounds.origin.y -= extendTouchInsets.top; 
    bounds.size.width += extendTouchInsets.left + extendTouchInsets.right; 
    bounds.size.height += extendTouchInsets.top + extendTouchInsets.bottom; 
    return CGRectContainsPoint(bounds, point); 
} 

@end