首页 文章

UIButton backgroundImage stretchableImageWithLeftCapWidth:topCapHeight问题

提问于
浏览
4

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

[[UIImage imageNamed:@"buttonimage.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0]

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

提前致谢!

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

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

2 回答

  • 5

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

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

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

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

  • 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像素 .

相关问题