我与 iOS 6/7 兼容的解决方案是在 Xib 文件中使用用户定义的运行时属性。这样我们就不必在源代码中到处写不雅的行来将 xib 中设置的图像替换为带有按钮帽插入的可拉伸图像。
第 1 步:在 Xib 中,选择按钮并在 Identity Inspector 面板中设置用户定义的运行时属性。您可以定义一个属性来设置 cap insets。例如,一个名为“capEnabled”的属性只有一个简单的布尔值来指示我们要为按钮使用默认的 cap insets。(我打算附上屏幕截图,但有人告诉我我需要至少 10 个声望才能发布图片...... :-( )
步骤 2:在 UIButton 上创建一个类别并添加一个属性“capEnabled”并实现 getter 和 setter 方法。
@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
第三步:在任何你想为你创建的 UIButton 使用新功能的地方导入类别的头文件,或者只是将它导入到 .pch 文件中。
希望我的解决方案对您有所帮助。