iOS 自定义键盘可拉伸图像停止拉伸
Posted
技术标签:
【中文标题】iOS 自定义键盘可拉伸图像停止拉伸【英文标题】:iOS custom keyboard stretchable image stops stretching 【发布时间】:2012-11-15 11:39:27 【问题描述】:我为 UITextField 制作了一个自定义键盘,由 18 个 UIButtons 组成。它是一个 UIView,它被设置为文本字段的 inputView。
按钮是在 UIView 的initWithFrame:
方法中使用代码创建的
UIImage* buttonImage =[[UIImage imageNamed:@"keyboard-button-background.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:79.0];
UIImage* buttonPressedImage =[[UIImage imageNamed:@"keyboard-button-pressed-background.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:79.0];
UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:title forState:UIControlStateNormal];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[button setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted];
button.frame = CGRectMake(xPosition, yPosition, buttonWidth, buttonHeight);
一旦按下按钮,该按钮就会被设置为enabled = NO
。至少启用一个按钮时,背景会完美拉伸。如果所有按钮都被禁用,并且 UITextfield resignsFirstResponder
然后 UITextField 再次成为 First Responder,则按钮出现但背景图像似乎不再拉伸(至少在垂直方向上没有,水平方向看起来很好)。
我不确定从哪里开始寻找解决方案。我的猜测是自定义键盘绘制子视图的方式,但我不确定。
可以通过将背景图像设置为layoutSubviews
或drawRect:
或类似的东西来解决这个问题吗?水平拉伸效果很好的事实让我想知道 UIButton 的框架是否在绘制时不正确。
编辑 最左边的单元格只是标签,右边带有数字的单元格是 UITextfields 并有自定义键盘
键盘的外观:
一旦在单元格 3 上放弃了第一响应者,然后给了 1 个第一响应者(所有键都被禁用),然后给了 4 个第一响应者,键盘的实际外观:
【问题讨论】:
你能附上一些截图吗?很难想象这应该是什么样子。 你在哪里设置你的矩形? 我已经添加了行,我在initWithFrame:
中设置了按钮的框架
【参考方案1】:
为了处理不同的 ios API,我为 UIImage。
@implementation UIImage (SPResizableImage)
- (UIImage *)spResizableImageWithCapInsets:(UIEdgeInsets)edge
UIImage * resizableImage = nil;
if ([self respondsToSelector:@selector(resizableImageWithCapInsets:)]) // iOS 5
resizableImage = [self resizableImageWithCapInsets:edge];
else
resizableImage = [self stretchableImageWithLeftCapWidth:edge.left
topCapHeight:edge.top];
return resizableImage;
@end
【讨论】:
嗯,这似乎工作!奇怪的是,stretchableImageWithLeftCapWidth:topCapHeight:
在某些情况下不能正常工作,但我们开始了!感谢您的帮助。【参考方案2】:
您使用的背景图片的尺寸是多少?
无论如何,stretchableImageWithLeftCapWidth:topCapHeight:
自 iOS 5 以来已被弃用。
尝试改用resizableImageWithCapInsets:
。
【讨论】:
图像大小为9 x 80
,此特定键盘上的按钮为53 x 65
。我有几种不同的键盘布局,但它们使用相同的图像。有趣的是,水平拉伸有效,但垂直似乎不起作用。
哦,我必须支持 iOS 4,所以如果可能的话,我需要使用 stretchableImage...
我认为问题出在顶值上。我在拉伸图像时遇到了类似的问题。以上是关于iOS 自定义键盘可拉伸图像停止拉伸的主要内容,如果未能解决你的问题,请参考以下文章