为什么按钮背景图像会拉伸?

Why are the button background images strecthing?

我有一个有侧边菜单的应用程序。在侧面菜单中,其余按钮显示正常,但有两个按钮奇怪地伸展。 附上截图。

这就是我设置按钮图像的方式。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    RearViewTableViewCell *cell = [self.tableViewSideMenu dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if(cell == nil)
    {

        NSArray *cellView = [[NSBundle mainBundle] loadNibNamed:@"RearViewTableViewCell" owner:nil options:nil];
        cell = (RearViewTableViewCell *)[cellView objectAtIndex:0];
        cell.btnItemSelector.tag = indexPath.row;
        [cell.btnItemSelector setBackgroundImage:[UIImage imageNamed:[buttonUnselect objectAtIndex:indexPath.row]] forState:UIControlStateNormal];
        [cell.btnItemSelector setBackgroundImage:[UIImage imageNamed:[buttonSelect objectAtIndex:indexPath.row]] forState:UIControlStateHighlighted];
        [cell.btnItemSelector addTarget:self action:@selector(btnMenuItemTapped:) forControlEvents:UIControlEventTouchUpInside];
        cell.selectionStyle =UITableViewCellSelectionStyleNone;

    }
    return cell;

}

我是自适应布局的新手。它会引起问题吗?在 iphone 5s 上它运行良好,但在 iphone 6 上它描述了这种行为。我只向表视图添加了一个约束(宽度)。我在这里使用的 uitableviewcell(自定义)具有前导 space、垂直 space、居中对齐等所有常规约束。有什么想法吗?

更新: 我将 bg 颜色设置为红色,结果问题中的两个按钮被调整为更小且可能更宽的视图。为什么会这样?

根据 "UIKit User Interface Catalog", "Buttons" chapter, "Images" section:

The Background (currentBackgroundImage) field allows you to specify an image to appear behind button content and fill the entire frame of the button. The image you specify will stretch to fill the button if it is too small. It will be cropped if it is too large.

因此,您需要将所有背景图片的大小设置为等于按钮的大小。

更新 或者确保您的约束已配置,以便按钮大小正确。

好吧伙计们,我不太明白为什么这解决了问题,但它确实解决了问题。

1) 我使用了 setImage 而不是 setBackgroundImage。

2) 我去掉了图片名称后缀.png。

3) 我清理了项目并重置了模拟器。

4) 成功了。

可能是缓存中还有以前的图像只包含?和我使按钮根据图像大小调整大小的符号,但我不能确定。如果其他人可以 post 对此做出更好的解释,我会将其标记为答案

我建议您使用 button.image 而不是 button.backgroundImage。看起来将 backgroundImage 设置为 UIButton 无法处理图像的 contentMode,因为它总是将 UIImage 拉伸到与 UIButton 相同的大小。

如果您在 property image 上添加 UIImage 您可以通过手动更改 contentEdgeInsets 来更改 UIButton 中图像的位置或者在 Interface Builder.

里面

万一你想为你的 UIButton 设置一个 UIImage 和一个 NSString,我会创建一个自己的 class 类型 [=12] =] 与 UILabelUIImage 并将它们布局在 Interface Builder.