指定单元格 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 的宽度的主要内容,如果未能解决你的问题,请参考以下文章
让自定义 TableViewCell 的 UIimageView 宽度为单元格宽度的 1/3,单元格高度 = 图像纵横比
自调整大小表格单元格中的 ImageView 在应用 Aspect Fit 之前使用图像的高度