11

ボタンの背景画像のサイズを変更せずに、UIButtonのタップ可能な領域を増やすことは可能ですか?

私は試した:

[shareButton setContentEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)];

[shareButton setImageEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)];

しかし、これらはどれも機能しませんでした。

何か提案をお願いしますか?

4

3 に答える 3

14

タイプのUIButtonを作成buttonWithType:UIButtonTypeCustomし、それに小さいサイズの画像を割り当てます。

画像を背景画像として設定しないでください。設定すると、ボタンとともに拡大します。代わりにメイン画像として設定してください。

たとえば、タップ可能な領域を64x64サイズに設定し、32x32サイズの画像を表示する場合、ボタンサイズは64x64、画像サイズは32x32である必要があります。

プログラムで:

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

// use an image with the desired size (for example 32x32)
[button setImage: [UIImage imageNamed: @"buttonIcon.png"] forState: UIControlStateNormal];
// just set the frame of the button (64x64)
[button setFrame: CGRectMake(xPositionOfMyButton, yPositionOfMyButton, 64, 64)];

Interface Builder:

InterfaceBuilderの例

于 2012-11-19T05:50:24.930 に答える
3

UIButtonのスーパービューをサブクラス化し、hitTest:withEvent:をオーバーライドします。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    CGPoint buttonPoint = [self convertPoint:point toView:_button];
    if ([_button pointInside:buttonPoint withEvent:event]) { // you may add your requirement here
        return _button;
    }
    return [super hitTest:point withEvent:event];
}
于 2012-11-06T07:56:07.827 に答える
3

Autolayoutと一緒に好きなデザインアプローチ(Interface Builder / Visual Format Language)を使用し、必要なサイズでUIButtonをレイアウトします。タイトルまたは画像をコンテンツとして設定し、タップ可能な領域のサイズの透明な画像を背景画像として使用します。

_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_button setImage:[UIImage imageNamed:@"contentImage"] forState:UIControlStateNormal];
[_button setBackgroundImage:[UIImage imageNamed:@"transparentImage"] forState:UIControlStateNormal];

ここでは、_button.layer.borderWidth=1の例を示します。

例

于 2015-09-02T13:14:23.277 に答える