你如何在界面构建器中设置stretchableImageWithLeftCapWidth?
Interface Builder不支持可拉伸图片。
-(void) viewDidLoad {
[super viewDidLoad];
[myImageView setImage:[[myImageView image] stretchableImageWithLeftCapWidth:5 topCapHeight:5 ]];
}
目前(截至版本4.5),这是 InterfaceBuilder 的一个限制。然而,为每个按钮创建一个 IBOutlet 并在 viewDidLoad 中手动指定图像可拉伸并不是一个好的解决方案,因为这样做会使 UI 设计更加繁琐且易出错。
相反,我们可以创建一个 UIButton 子类,它默认将任何背景图像设为可拉伸。在这个示例中,我只拉伸了正常和高亮状态的背景图像。对于一个生产就绪的类,您可能需要检查所有状态的前景和背景图像,并将它们拉伸。
@implementation NTSTButton
- (id) initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
/* There is no support in IB for stretchable images. So, let's
make sure _any_ background image assigned to this button
stretches correctly.
Note: Setting the stretch cap to 10px, which should work with
almost all button background images.
*/
UIImage *normalImage =
[[self backgroundImageForState:UIControlStateNormal]
stretchableImageWithLeftCapWidth:10 topCapHeight:10] ;
UIImage *highlightedImage =
[[self backgroundImageForState:UIControlStateHighlighted]
stretchableImageWithLeftCapWidth:10 topCapHeight:10] ;
[self setBackgroundImage:normalImage
forState:UIControlStateNormal];
[self setBackgroundImage:highlightedImage
forState:UIControlStateHighlighted];
}
return self;
}
@end
stretchableImageWithLeftCapWidth:topCapHeight:
已被弃用。@implementation UIButtonStretchable
- (id) initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self setBackgroundImage: [[self backgroundImageForState:UIControlStateNormal] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:UIControlStateNormal];
[self setBackgroundImage: [[self backgroundImageForState:backgroundImageForState:UIControlStateHighlighted] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:backgroundImageForState:UIControlStateHighlighted];
}
return self;
}
@end
iOS7还引入了资源目录,您可以在其中指定图像的可拉伸区域,但仅适用于仅支持iOS7的情况(即,您不关心原始iPad、iPod touch或3GS的用户;是的,在iOS中没有碎片化)。
在 View
部分使用 Stretching
配置。
首先,将视图模式更改为 Aspect fill
。
然后在 Stretching
部分编辑 X、Y、宽度、高度字段。
例如:假设您有一个图像大小为 10x20,并希望将其适配到视图大小为 5x10 ==> 设置 X = 5/10 = 0.5,Y = 10/20 = 0.5
注意:IB 不允许您使用较小的图像“拉伸”到更大的框架中,因此您需要尽可能地设计您的图像较大。