指定单元格 imageView 的宽度

Posted

技术标签:

【中文标题】指定单元格 imageView 的宽度【英文标题】:Specify width of the cell imageView 【发布时间】:2011-08-26 08:48:12 【问题描述】:

是否可以将[[cell imageView] 的宽度限制为标准UITableViewCell? 我试过[[cell imageView] setFrame:CGRectMake(0, 0, 50, 50)],但是没有效果。

[编辑]

否则,是否可以在将 UIImage 添加到 UIImageView 之前更改其大小?

【问题讨论】:

有数以千计的类别实现用于缩放您的图像。 【参考方案1】:

您可以在 UIView 示例中使用 .transform 方法

cell.imageView.transform = CGAffineTransformMakeScale(0.65, 0.65);

//如果你是 UITableViewCell 的子类,你也可以这样做

- (void)layoutSubviews 

    [super layoutSubviews];
    self.imageView.bounds = CGRectMake(10,5,65,65);
    self.imageView.frame = CGRectMake(10,5,65,65);
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;

    if (self.imageView.image) 
        //TODO: adjust the textLabel and detailTextLabel
    


【讨论】:

在使用表格单元格调整图像视图或 UIView 的大小后,请使用 cGAffineTransform 方法。例如 myUiImageView.transform = CGAffineTransformMakeScale(0.65, 0.65);子类化和调用布局子视图对我不起作用。 如果您使用 dequeueReusableCellWithIdentifier: 在单元格的图像视图上设置转换可能会被重置:并且单元格会滚动到屏幕外。【参考方案2】:

如果您不能简单地在常规 UITableViewCell 上设置图像视图的框架,您可以创建一个 UITableViewCell 子类,并将图像视图重新定位在 -layoutSubviews 中。

【讨论】:

【参考方案3】:

这是为每个单元格提供 imageView 的内置功能。它的框架不能改变,除非它被子分类。

但是,您可以通过在方法中添加以下代码来添加任何自己的 imageView,

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

    NSString* cellIdentifier = @"cellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if(cell == nil)
    
        cell = (UITableViewCell*) [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        UIImageView* *myView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
        [myView setImage:image];
        myView.tag = 123;

        [cell.contentView addSubview:myView];
        [myView release];
    
    else
    
        myView = (UIImageView*) [cell.contentView viewWithTag:123];
    

【讨论】:

【参考方案4】:

图像固定尺寸:

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[imgview setImage:image];
[cell addSubview:imgView];
[imgView release];

【讨论】:

这个问题的目的是避免这样做。【参考方案5】:

不,这是不可能的。

它的宽度不应该改变,因为你必须创建 UITableViewCell 子类,你可以改变 UITableViewCell 中的 imageview 并根据它改变宽度。 或者你可以使用

UITableViewCell *cell = (UITableViewCell *)[tableView    dequeueReusableCellWithIdentifier:CellIdentifier];

UIImageView *imgView; 
if(cell == nil)

    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    imgView = [[UIImageView alloc] initWithFrame:(100,0,100,62)];
    [imgView setImage:[UIImage imageNamed:@"img.png"]];
    imgView.tag = 55;
    [cell.contentView addSubview:imgView];
    [imgView release];
 
else

    imgView = (id)[cell.contentView viewWithTag:55];

【讨论】:

【参考方案6】:

这是我对这个问题的快速解决方案

//
//  UITableVIewCellBasicWithFixedSizeImage.swift
//
//  Created by Andrew Ashurow on 4/28/16.
//  Copyright © 2016. All rights reserved.
//

class UITableVIewCellBasicWithFixedSizeImage: UITableViewCell 
        private let
        IMAGE_VIEW_WIDTH:CGFloat        = 27,
        TEXT_VIEW_LEFT_INSET:CGFloat    = 15

        override func layoutSubviews() 
            super.layoutSubviews()
            if let
                imageView = imageView,
                textLabel = textLabel
                //set fixed image width
                imageView.frame = CGRect(
                    origin: imageView.frame.origin,
                    size: CGSize(
                        width: IMAGE_VIEW_WIDTH,
                        height: imageView.frame.size.height
                    )
                )
                imageView.contentMode = .Center
                imageView.autoresizingMask = .None

                //calculate textLabel inset
                textLabel.frame = CGRect(
                    origin: CGPoint(
                        x: imageView.frame.origin.x + imageView.frame.size.width + TEXT_VIEW_LEFT_INSET,
                        y: textLabel.frame.origin.y
                    ),
                    size: textLabel.frame.size
                )

            
        
    

【讨论】:

以上是关于指定单元格 imageView 的宽度的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell 宽度的动态变化

让自定义 TableViewCell 的 UIimageView 宽度为单元格宽度的 1/3,单元格高度 = 图像纵横比

自调整大小表格单元格中的 ImageView 在应用 Aspect Fit 之前使用图像的高度

table固定宽度与自动宽度

如何从动态 UITableView 单元格中获取 UILabel 的大小?

itext的单元格怎么设置宽度