3

80x30 ピクセルのサイズのボタンの背景画像があります。

以下のコードを使用してビュー コントローラーで背景を設定すると、結果は次のようになります。

上部と隅がうるさい

ご覧のとおり、右ボタンの角と上部がめちゃくちゃです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    UIImage *favoriteBtnImgNormal = [[UIImage imageNamed:@"favorite-btn-normal"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 30, 0)];
    UIImage *favoriteBtnImgTouch = [[UIImage imageNamed:@"favorite-btn-touch"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 30, 0)];

    [self.navigationItem.rightBarButtonItem setBackgroundImage:favoriteBtnImgNormal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [self.navigationItem.rightBarButtonItem setBackgroundImage:favoriteBtnImgTouch forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
    [self.navigationItem.rightBarButtonItem setBackgroundImage:favoriteBtnImgTouch forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
    [self.navigationItem.rightBarButtonItem setTitlePositionAdjustment:UIOffsetMake(-10.0, 0.0) forBarMetrics:UIBarMetricsDefault];
}

これを 1 つのビュー コントローラーで行うことに注意してください。外観 API を使用して一般的なスタイルを設定します。しかし、ここでは一般的な外観をオーバーライドしたいと思います。

サイズ変更可能なものなしで画像を取得すると、次のようになります。

大きすぎる

エッジとコーナーは問題ありませんが、ボタンが大きすぎます。

私はこれをすべて間違っていると確信しているので、ボタンを正しくスケーリングするために何ができるかを誰かに指摘してもらう必要がありますか?

4

1 に答える 1

0
UIImage *image = [UIImage imageNamed:@"YourImage"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );

[button setImage:image forState:UIControlStateNormal];
[button addTarget:self action:@selector(YourAction) forControlEvents:UIControlEventTouchUpInside];

button.contentEdgeInsets = (UIEdgeInsets){.right=-10};

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];
于 2013-04-03T03:34:41.187 に答える