我想使用大小为27x27的图像,中心1像素可伸缩作为UIButton的backgroundImage。这是我的代码:
[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
button.frame = CGRectMake(0.f, 0.f, 27.f, 27.f);
button.contentStretch = CGRectMake(13.f/27.f, 13.f/27.f, 1.f/27.f, 1.f/27.f);
[button setTitle:NSLocalizedString(@"long title", @"long title") forState:UIControlStateNormal];
[button sizeToFit];
CGRect buttonFrame = button.frame;
buttonFrame.size.width += 18.f * 2;
button.frame = buttonFrame;
但结果与没有设置contentStretch的结果没什么不同。
那么如何正确使用contentStretch来实现我想要的呢?
请不要一次又一次地告诉我,我可以用stretchableImageWithLeftCapWidth:topCapHeight:
达到同样的效果。我知道,这显然不是我要求的。我只是想知道如何正确使用contentStretch
。感谢。
答案 0 :(得分:1)
我看到的一个问题是你使用整数除法进行划分。 1/2/等于0. 1.0 / 27.0等于0.037 ...
如果您想要的只是按钮上的可伸缩背景,请查看在UIImage上的stretchableImageWithLeftCapWidth:topCapHeight :.以这种方式创建可伸缩图像,然后将其设置为按钮的背景。
答案 1 :(得分:1)
我不知道UIButtons的特殊行为(我还建议在那里使用stretchableImages,因为它是复合视图)。但是,如果你想使用contentStretch你可以在UIView上这样做,因为你的数据是:
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
view.layer.contents = (id)[[UIImage imageNamed:@"button_image"] CGImage];
view.contentStretch = CGRectMake(13./27., 13./27., 1./27., 1./27.);
这应该足以让UIView具有可伸缩的背景。
答案 2 :(得分:1)
使用-[UIImage stretchableImageWithLeftCapWidth:topCapHeight:]
。
我把它放在init
的子类UIView
方法中:
// Add errorBackground & errorLabel.
rect.size.height = 26.0f;
errorBackground = [[UIImageView alloc] initWithFrame:rect];
errorBackground.image = [[UIImage imageNamed:@"ErrorBubble.png"]
stretchableImageWithLeftCapWidth:13 topCapHeight:0];
UILabel *errorLabel = [[UILabel alloc] initWithFrame:
CGRectMake(0.0f, 0.0f, rect.size.width, rect.size.height)];
errorLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
errorLabel.backgroundColor = [UIColor clearColor];
errorLabel.textAlignment = UITextAlignmentCenter;
errorLabel.font = [UIFont systemFontOfSize:14.0f];
errorLabel.text = @"1 Failed Passcode Attempt";
errorLabel.textColor = [UIColor whiteColor];
errorLabel.shadowColor = [UIColor blackColor];
errorLabel.shadowOffset = CGSizeMake(0.0f, -1.0f);
[errorBackground addSubview:errorLabel];
[errorLabel release];
[self addSubview:errorBackground];
ErrorBubble.png:
ErrorBubble@2x.png:
答案 3 :(得分:1)
不满意但简单的答案:
你不能,直到Apple修复此问题。 IMO这是一个长期存在且非常讨厌的bug。
UIButton实现包含几个子视图,(内部)背景视图似乎不反映在UIButton视图上完成的设置。