我有一个UIButton
,其指定宽度为200.其autoresizingMask
属性设置为UIViewAutoresizingFlexibleWidth
。 UIImage
应用于此按钮的backgroundImage
属性。此UIimage
定义如下:
[[UIImage imageNamed:@"buttonimage.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0]
buttonimage.png
的宽度为400px(由于视网膜分辨率,按钮宽度为2倍)并且表示圆角矩形。在纵向模式下,一切都很好。一旦用户旋转设备并且iPhone进入横向模式,UIButton
就会被拉伸。由于此行为,图像的左圆角边界保持不变(stretchableImageWithLeftCapWidth:
),但右角也被拉伸。是否有任何我忘记设置的属性确保只有一个指定的像素(例如第十个像素)被拉伸而其他任何东西都保留了它的尺寸?
提前致谢!
编辑:如果我使用较小的图像,已经在纵向模式下拉伸,则两个边框似乎都会被展开。
解决! 如果您的图像被称为“myImage.png”并且它是视网膜版本,请将其命名为“myImage@2x.png”
答案 0 :(得分:5)
我忘了设置任何属性吗? 确保只有一个指定的像素 (例如第十个)被拉伸了 其他任何东西都保留了它的尺寸?
不是,但考虑到图片的大小,您应该重新阅读leftCapWidth属性。
可伸展图像的工作方式是:提供左上角,下一个像素被拉伸,而width = (total width - left cap + 1)
的图像右侧保持不变。假设您将左上角设置为10,而原始图像为400,则告诉iOS图像右侧不可伸展的右侧是400-10-1=389px
。同样的事情垂直适用。检查您是否在普通设备上使用@ 2x图像,其名称上没有@ 2x,或者2x版本的像素不是两倍,或者是大写/小写差异。您可以通过nslogging找到加载的图像大小。
我不知道为什么图像的右侧会被拉伸。假设您有height=0
,如果按钮高度发生变化,整个图像可以垂直拉伸,但这不太可能导致仅右侧失真。
答案 1 :(得分:2)
据我所知,您的代码没有任何问题,应该导致图像的右侧被裁剪。下面是我使用的确切代码,我知道它可以产生与你正在寻找相同的效果。
UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 245, 51)];
button.autoresizingMask=UIViewAutoresizingFlexibleWidth;
[button setBackgroundImage:[[UIImage imageNamed:@"userbubble.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:0] forState:UIControlStateNormal];
[self.view addSubview:button];
我的猜测是问题来自您正在使用的png,或者可能来自项目中的Compress PNG Files设置。此外,由于您使用的图像太大,请尝试进一步将左图像放出,例如40或50像素。