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

时间:2015-01-07 12:51:24

标签: ios iphone uitableview adaptive-ui

我有一个应用程序,我有一个侧面菜单。在侧面菜单中,其余的按钮看起来很好,但两个按钮很奇怪。附上Screenshot屏幕截图。

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

- (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上它描绘了这种行为。我只向tableview添加了一个约束(宽度)。我在这里使用的uitableviewcell(自定义)具有前导空间,垂直空间,中心对齐等所有常规约束。任何想法?

更新:我将bg颜色设置为红色,结果显示问题中的两个按钮被调整为更小和更小。可能更广阔的视野为什么会发生这种情况?update

3 个答案:

答案 0 :(得分:1)

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

  

Background(currentBackgroundImage)字段允许您指定要在按钮内容后面显示的图像并填充按钮的整个帧。如果按钮太小,您指定的图像将会拉伸以填充按钮。如果它太大,它将被裁剪。

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

更新或确保配置约束以使按钮大小正确。

答案 1 :(得分:1)

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

如果您在UIImage property上添加image,可以通过手动或内部更改UIButton来更改contentEdgeInsets内图片的位置Interface Builder

如果您想为UIImage设置NSStringUIButton,我会创建一个类型为UIButtonUILabel的类。 1}}和UIImage并将它们布置在Interface Builder

答案 2 :(得分:0)

好吧,伙计们,我不知道为什么这样才解决了这个问题,但事实确实如此。

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

2)我从图像名称中删除了后缀.png。

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

4)它奏效了。

可能是缓存仍然有以前的图像只包含?和我按照图像大小调整按钮大小的符号,但我无法确定。如果其他人可以发布更好的解释,我将其标记为答案