4

ボタンと柔軟なスペースを含むaUINavigationBarと a (別々のビュー) があります。' 背景は次のように設定されますUIToolbarUIBarButtonItems

bgImage = [[UIImage imageNamed:@"MyBackgroundImage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
[self setBackgroundImage:bgImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

の中でUINavigationBar、アイテムは問題なく、最適なサイズとすべてに見えます。

ただし、 内ではUIToolbar、アイテムは常に少なくとも幅bgImage(この場合は 100 ポイント) に引き伸ばされます。

ここに画像の説明を入力 ここに画像の説明を入力

理由、またはそれを解決する方法はありますか? さらに情報が必要な場合は教えてください。

4

3 に答える 3

3

これはUIToolbarのバグのようです。私はそれを試してみました、そして私のために働いた唯一の「修正」はUIBarButtonItemの幅を手動で設定することでした:

barButtonItem.width = 40f;

これは、画像付きのボタンでは正常に機能しますが、ローカリゼーションによってテキストのサイズが異なる可能性があるため、テキストボタンでは機能しません。

于 2013-03-19T16:57:35.967 に答える
0

必要に応じて、次のメソッドを使用して画像サイズを取得/作成できます。

画像で特定のさとで次の方法を使用します

+ (UIImage*)resizeImage:(UIImage*)image withWidth:(int)width withHeight:(int)height
{
    CGSize newSize = CGSizeMake(width, height);
    float widthRatio = newSize.width/image.size.width;
    float heightRatio = newSize.height/image.size.height;

    if(widthRatio > heightRatio)
    {
        newSize=CGSizeMake(image.size.width*heightRatio,image.size.height*heightRatio);
    }
    else
    {
        newSize=CGSizeMake(image.size.width*widthRatio,image.size.height*widthRatio);
    }


    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

このメソッドは、指定した特定のサイズでNewImageを返します。
そして、この画像をアドオンに使用しUIBarButtonItemます。

于 2013-03-19T11:01:39.883 に答える
0

要件に応じて画像付きの独自のボタンを作成する

//  UIBarButtonItem+CutomBackground.h

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString *)buttonTitle target:(id)target action:(SEL)action;

//  UIBarButtonItem+CutomBackground.m

#define TEXT_MARGIN 8.0f
#define ARROW_MARGIN 12.0f
#define FONT_SIZE 13.0f
#define IMAGE_HEIGHT 31.0f

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString *)buttonTitle target:(id)target action:(SEL)action
{       
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage *buttonImage = [image stretchableImageWithLeftCapWidth:15 topCapHeight:0];    
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
    [button setTitle:buttonTitle forState:UIControlStateNormal];
    [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight];
    [button setContentEdgeInsets:UIEdgeInsetsMake(0.0f,0.0f,0.0f,TEXT_MARGIN)];
    [button.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:FONT_SIZE]];
    [button.titleLabel setShadowOffset:CGSizeMake(0.0f,-1.0f)];
    CGRect buttonFrame = [button frame];
    buttonFrame.size.width = [buttonTitle sizeWithFont:[button.titleLabel font]].width+ARROW_MARGIN+TEXT_MARGIN;
    buttonFrame.size.height = IMAGE_HEIGHT;
    [button setFrame:buttonFrame];
    return [[self alloc] initWithCustomView:button];
}
于 2013-03-19T13:17:17.833 に答える