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

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

[编辑]

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

【问题讨论】:

  • 有数以千计的类别实现用于缩放您的图像。

标签: iphone ios uitableview 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
                        )
        
                    }
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-23
          • 2011-05-10
          相关资源
          最近更新 更多