iOS 6/7 と互換性のある私のソリューションは、Xib ファイルでユーザー定義のランタイム属性を使用することです。そのため、xib に設定された画像を、ボタンのキャップ インセットを備えた伸縮可能な画像に置き換えるために、ソース コードのいたるところに洗練されていない行を記述する必要はありません。
ステップ 1: Xib でボタンを選択し、Identity Inspector パネルで User Defined Runtime Attributes を設定します。キャップ インセットを設定するための属性を定義できます。たとえば、ボタンにデフォルトのキャップインセットを使用することを示す単純なブール値を持つ「capEnabled」という属性。(スクリーンショットを添付するつもりでしたが、画像を投稿するには少なくとも10の評判が必要だと言われました... :-( )
ステップ 2: UIButton にカテゴリを作成し、プロパティ「capEnabled」を追加して、ゲッター メソッドとセッター メソッドを実装します。
@interface UIButton (NBAHelper)
@property (nonatomic, assign) BOOL capEnabled;
@end
@implementation UIButton (NBAHelper)
-(BOOL)capEnabled{
UIImage *buttonBackgroundImage = [self backgroundImageForState:UIControlStateNormal];
CGFloat capLeft = buttonBackgroundImage ? buttonBackgroundImage.capInsets.left : 0;
return capLeft>0;
}
-(void)setCapEnabled:(BOOL)capEnabled{
if (capEnabled) {
UIImage *buttonBackgroundImage = [self backgroundImageForState:UIControlStateNormal];
if (buttonBackgroundImage) {
[self setBackgroundImage:[buttonBackgroundImage stretchableImageWithLeftCapWidth:5 topCapHeight:5] forState:UIControlStateNormal];
}
}
}
@end
手順 3: 作成した UIButton の新機能を使用するすべての場所で、カテゴリのヘッダー ファイルをインポートするか、単に .pch ファイルにインポートします。
私の解決策がお役に立てば幸いです。