3

にあるすべてのボタンの下に小さな黒い線がありますUIControlStateNormal。[戻る] ボタンと [完了] ボタンは影響を受けません。

ここに画像があります:

ここに画像の説明を入力

あなたはそれをはっきりと見ることができ、それは非常に迷惑です。すべての画像を設定する方法は次のとおりです。

[[UIBarButtonItem appearance] setBackgroundImage:[UIImage imageNamed:@"nav-button"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

戻るボタンと完了ボタンに同じ手法を使用していますが、問題はありません。

4

2 に答える 2

3

を使用してみてください[[UIImage imageNamed:@"nav-button"] resizableImageWithCapInsets:...]。ボタンの高さよりも短いため、画像が並べて表示されているようです。

于 2012-10-22T12:51:45.077 に答える
2

正確にはあなたが望むものではないかもしれませんが、これは私がこれを処理する方法です:

+ (id) customButtonWithImageNamed:(NSString *)imageName selectedImageNamed:(NSString *)selectedImageName leftCapWidth:(CGFloat)leftCapWidth edgeInsets:(UIEdgeInsets)edgeInsets title:(NSString *)title target:(id)target selector:(SEL)selector {

    UIButton* customButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [customButton addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];
    customButton.titleLabel.font = [UIFont boldSystemFontOfSize:12.0f];
    customButton.titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f];
    customButton.titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f);
    customButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
    customButton.titleEdgeInsets = edgeInsets;
    UIImage* navButtonBackgroundImage = [[UIImage imageNamed:imageName] stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:0.0f];
    UIImage* navButtonPressedBackgroundImage = [[UIImage imageNamed:selectedImageName] stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:0.0f];
    [customButton setBackgroundImage:navButtonBackgroundImage forState:UIControlStateNormal];
    [customButton setTitle:title forState:UIControlStateNormal];
    [customButton setBackgroundImage:navButtonPressedBackgroundImage forState:UIControlStateHighlighted];
    [customButton setBackgroundImage:navButtonPressedBackgroundImage forState:UIControlStateSelected];

    CGSize size = CGSizeMake(30.0f, 30.0f);
    if (title != nil) {
        size = [[NSString stringWithString:title] sizeWithFont:customButton.titleLabel.font];
    }
    customButton.frame = CGRectMake(0.0f, 0.0f, size.width + 20.0f, 30.0f);
    customButton.layer.shouldRasterize = YES;
    customButton.layer.rasterizationScale = [[UIScreen mainScreen] scale];
    return [[[UIBarButtonItem alloc] initWithCustomView:customButton] autorelease];
}

素敵なボタンを返す静的メソッドがあります:)

+ (id) customBarButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector {
    return [self customButtonWithImageNamed:@"navbarbutton"
                         selectedImageNamed:@"navbarbutton_active"
                               leftCapWidth:5.0f
                                 edgeInsets:UIEdgeInsetsMake(0.0f, 5.0f, 0.0f, 5.0f)
                                      title:title
                                     target:target
                                   selector:selector];
}

=> self.navigationItem.leftBarButtonItem = [UIBarButtonItem customBarButtonWithTitle:@ "Info" target:selfセレクター:@selector(pushInfoViewController)];

于 2012-10-22T12:59:18.577 に答える