14

新しいビューがスタックにプッシュされると、ナビゲーション バーに自動的に配置される [戻る] ボタンのカスタム イメージを設定しようとしています。

親viewControllerのviewDidLoadに次を追加しようとしました:

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"BackButton.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

私も次のことを試しました:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"BackButton.png"] style:UIBarButtonItemStyleBordered target:nil action:nil];
    self.navigationItem.backBarButtonItem = btn;

UIAppearance を使用すると、非常に奇妙な結果が得られます。 BackButton 画像は元のタイトルの下に配置されているようです

4

8 に答える 8

37

このコードを試してください

UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];  
UIImage *backBtnImage = [UIImage imageNamed:@"BackBtn.png"]  ;  
[backBtn setBackgroundImage:backBtnImage forState:UIControlStateNormal];  
[backBtn addTarget:self action:@selector(goback) forControlEvents:UIControlEventTouchUpInside];  
backBtn.frame = CGRectMake(0, 0, 54, 30);  
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backBtn] ;  
self.navigationItem.leftBarButtonItem = backButton;

次に、このように goback メソッドを定義します

- (void)goback
{
    [self.navigationController popViewControllerAnimated:YES];
}
于 2012-06-13T18:27:47.713 に答える
29

iOS 7.0 以降、 API に新しいメソッドが追加されましたbackIndicatorImagesetBackButtonBackgroundImage テキストに合わせて画像を引き伸ばしたくない場合 (たとえば、固定サイズのカスタムの戻る矢印が必要な場合)の代わりに使用できます。迅速な例を次に示します。

let image = UIImage(named: "back_button")
    
UINavigationBar.appearance().backIndicatorImage = image
UINavigationBar.appearance().backIndicatorTransitionMaskImage = image

このトリックを使用して、ボタンからテキストを非表示にすることができます。

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -66), for: .default)

スイフト 5 の場合

var backButtonImage = UIImage(名前: "back_button")

backButtonImage = backButtonImage?.stretchableImage(withLeftCapWidth: 15, topCapHeight: 30) UIBarButtonItem.appearance().setBackButtonBackgroundImage(backButtonImage, for: .normal, barMetrics: .default)

于 2015-12-20T00:34:10.773 に答える
23

これは私が使用しているコードで、自分の iOS 5 アプリで完全に動作します。このコードはapplication:didFinishLaunchingWithOptions:アプリ デリゲートからのものです。

UIImage * backButtonImage = [UIImage imageNamed: @"back-button-image"];
backButtonImage = [backButtonImage stretchableImageWithLeftCapWidth: 15.0 topCapHeight: 30.0];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage: backButtonImage forState: UIControlStateNormal barMetrics: UIBarMetricsDefault];

左向きの「ポイント」が左キャップである、伸縮可能な画像を使用する必要がある場合があります


またはSwiftで

let backButtonImage = UIImage(named: "back-button-image")
backButtonImage = backButtonImage?.stretchableImageWithLeftCapWidth(15, topCapHeight: 30)
UIBarButtonItem.appearance().setBackButtonBackgroundImage(backButtonImage, forState: .Normal, barMetrics: .Default)
于 2012-06-13T23:31:32.623 に答える
1

これは私のために働いた:

let button1 = UIBarButtonItem(
    image: #imageLiteral(resourceName: "back_arrow"), 
    style: .plain, 
    target: self, 
    action: #selector(self.backBtnTapped(_:))
)
self.navigationItem.leftBarButtonItem  = button1
于 2017-05-04T11:44:19.350 に答える