UITableViewCell backgroundView 图像调整大小?

Posted

技术标签:

【中文标题】UITableViewCell backgroundView 图像调整大小?【英文标题】:UITableViewCell backgroundView image resizing? 【发布时间】:2010-10-16 14:58:53 【问题描述】:

我正在使用图像来显示 UITableViewCell 的全部内容,它是使用 backgroundView 属性设置的。

我的问题是它总是被缩放以适应单元格。有没有办法在这种情况下禁用缩放,所以我只能提供 480 像素的版本,当方向是纵向时它只会被裁剪?

我是这样做的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath     
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    
        UIImageView *bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"menu.0%d.large.png", indexPath.row+1]]];
        UIImageView *selectedBgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"menu.0%d.large.selected.png", indexPath.row+1]]];    
        cell.backgroundView = bgView;
        cell.selectedBackgroundView = selectedBgView;        
        [bgView release];
        [selectedBgView release];
    return cell;

当方向改变时,我尝试使用两个版本的图像在它们之间切换。到目前为止,这也是可行的,但它的缺点是在处理动画时总是会看到缩放。

感谢您的帮助

阿恩

【问题讨论】:

【参考方案1】:

设置背景图像视图的内容模式。

bgView.contentMode = UIViewContentModeTopLeft;
selectedBgView.contentMode = UIViewContentModeTopLeft;

这告诉UIImageView 将其图像放在左上角而不是缩放以适应。

【讨论】:

不知道那个,比我的想法更聪明(也更短):) 有时懒惰是值得的。 :) 这是一个UIView 属性,所以它在一些地方会派上用场。 我在玩 contentMode,但似乎我做错了地方。谢谢,它就像一个魅力:)【参考方案2】:

我没有在模拟器或设备上尝试过,但以下方法可能有效:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath     
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    // New!
    cell.backgroundView.clipsToBounds = YES;

    UIImageView *bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"menu.0%d.large.png", indexPath.row+1]]];
    UIImageView *selectedBgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"menu.0%d.large.selected.png", indexPath.row+1]]];    
    // New!
    bgView.center = CGPointMake(160, 25); // Adjust the y-Value to be exactly half of the height of your cell
    bgView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; // Not quite sure whether these two will work, maybe you have to play a little with the Masks

    cell.backgroundView = bgView;
    cell.selectedBackgroundView = selectedBgView;        
    [bgView release];
    [selectedBgView release];
return cell;

让我知道你是否设法让它运行起来。

【讨论】:

感谢您的回答。我来不及检查它,因为我回来时已经找到了詹姆斯的解决方案。不过还是谢谢你的帮助! 谢谢!我将UIViewContentModeTopLeftclipToBounds = YES 结合使用以使其适用于我的项目。【参考方案3】:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

你在找吗,我想。

更多信息: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

【讨论】:

以上是关于UITableViewCell backgroundView 图像调整大小?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签

突出显示的 UITableViewCell 和选定的 UITableViewCell 有啥区别?

斯威夫特 - UITableViewCell?不能转换为 UITableViewCell

UITableviewcell的性能问题

UITableViewCell 上的动画按钮而不影响其他 UITableViewCell

如何制作一个继承自另一个 UITableViewCell 的 UITableViewCell?