UIButton backgroundImage stretchableImageWithLeftCapWidth:topCapHeight问题

fsc*_*idl 4 iphone objective-c uibutton uikit uiimage

我有一个UIButton指定宽度为200.其autoresizingMask属性设置为UIViewAutoresizingFlexibleWidth.A UIImage适用于此按钮的backgroundImage属性.这UIimage定义如下:

[[UIImage imageNamed:@"buttonimage.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0]
Run Code Online (Sandbox Code Playgroud)

buttonimage.png宽度为400像素(按钮的宽度为2倍,因为视网膜分辨率)并且表示圆角矩形.在纵向模式下,一切都很好.一旦用户旋转设备并且iPhone进入横向模式,UIButton就会拉伸.由于此行为,图像的左圆角边界保持不变(stretchableImageWithLeftCapWidth:),但右角也拉伸.是否有任何我忘记设置的属性,确保只有一个指定的像素(例如第十个像素)被拉伸而其他任何东西都保留了它的尺寸?

提前致谢!

编辑:如果我使用较小的图像,已经在纵向模式下拉伸,两个边框似乎都会被展开.

解决了! 如果您的图像被称为"myImage.png"并且它是视网膜版本,请将其命名为"myImage@2x.png"

Jan*_*ano 5

是否有任何我忘记设置的属性,确保只有一个指定的像素(例如第十个像素)被拉伸而其他任何东西都保留了它的尺寸?

不是真的,但考虑到图像的大小,您应该重新读取leftCapWidth属性.

可伸展图像的工作方式是:提供左上角,下一个像素被拉伸,图像的右侧width = (total width - left cap + 1)保持不变.假设您将左上角设置为10,并且原始图像为400,则表示您正在告诉iOS图像的右侧不可伸缩400-10-1=389px.同样的事情垂直适用.检查您是否在普通设备上使用@ 2x图像,其名称上没有@ 2x,或者2x版本的像素不是两倍,或者是大写/小写差异.您可以通过nslogging找到加载的图像大小.

我不知道为什么图像的右侧会被拉伸.鉴于你有height=0,如果按钮高度改变,整个图像可以垂直拉伸,但这不太可能导致只有右侧的扭曲.