如何让 UITableViewCell 中的 imageView 大小固定

UITableView可以算是使用频率最高的组件之一的,在开发过程中经常需要展示一些简单的信息列表
常见列表布局

如图,很多页面其实就是这种展示结果,通常需要imageView,textLabel,detailTextlabel,而UITableViewCell本身提供了方便的自动布局(当有图片和没图片时,textLabel和detailLabel的位置会左右自动调整). 但是图片的大小却是没有办法固定的(直接设置imageView.frame是无法固定imageView的大小的),那么一般来说解决这个问题的办法有两种:

  • 固定显示图片的大小(包括PlaceHolder)
  • 自定义tableViewCell,添加自定义的imageView,textLabeldetailTextLabel

这两种方式都可以解决这个问题,但是这两种方式其实都挺麻烦的,能否直接固定imageView的大小呢? 方法是有的,只需要重载layoutSubviews即可

派生UITableViewCell

12345678910111213141516171819
//自定义一个Cell@interface MMCell : UITableViewCell

@end

@implementation MMCell

//重载layoutSubviews- (void)layoutSubviews{    UIImage *img = self.imageView.image;    self.imageView.image = [UIImage imageName:@"res/PlaceHolder.png"];    [super layoutSubviews];    self.imageView.image = img;}

@end

这样,我们只要使用MMCell就可以固定imageView的大小了,且大小为PlaceHolder.png的大小(一般来说这种页面都会使用一个PlaceHolder.png来显示默认图片).

原理是在UItableVeiwlayoutSubviews调用时,会根据imageView.image的大小来调整imageView,textLabel,detailTextLabel的位置,在此之前我们先将imageView.image设置为PlaceHolder.png图片,等待重新布局完后再将原本的图片设置回去就可以了

时间: 2024-11-06 14:11:45

如何让 UITableViewCell 中的 imageView 大小固定的相关文章

iOS UITableViewCell 中 调整imageView 的图片大小

在我的项目中,很多地方都希望将UITableViewCell 中的imageView 能根据自己图片的大小来进行展示,而就为了解决这个问题又觉得重写UITableViewCell 很不值得. 如下: : 其实我就只有 图片变形的问题.所以我第一时间想到的是调整imageView 内容布局模式以及外框大小 cell.imageView.contentMode=UIViewContentModeCenter; cell.imageView.frame=.... 另外如: cell.imageView

UITableViewCell中设置动态大小的圆形imageview

在一个自定义的UITableViewCell里有一个imageview需要显示成圆形,因为它的宽高是autolayout动态设置的,所以不能在xib中设置layer.cornerRadius.于是我就在awakeFromNib中设置layer.cornerRadius与layer.masksToBounds的,测试发现iPhone6下没有问题,但是在iPhone5下显示不对.在awakeFromNib中打印imageview的frame,发现width与height还是xib中的原始值,这样显然

修改UITableViewCell中UIImageView的位置和大小

问题描述:当我们在iOS中实现带图片带列表显示时UITableViewCell中自带了一个存放图片的控件UIImageView,当我们获取的图片大小一致时,图片能够很整齐大显示,可是有些时候我们获取的列表图片的大小并不完全一致,为了保证界面的美观我们必须调整图片大小或位置,可是当我们在定义好的UITableViewCell对象中设置cell.imageView.bounds.cell.imageView.frame时发现无论设置什么值都无法改变图片的大小和位置. 解决办法: 给UITableVi

UITableVIewcell中图片不能改变大小的原因

你有没没有发现,有时候把图片放进cell.imageView中时无法顺利改变大小呢? 其实根本原因是要在layoutSubviews重新配置一下,cell的布局里面默认有一个imageiView,同时,我们如果自己定义的话也需要在layoutSubviews中布局控件. - (void)layoutSubviews { //改变系统cell.imageView大小的方法 [super layoutSubviews]; self.imageView.bounds =CGRectMake(10,5,

Java ByteArrayOutputStream中buf 的大小增长问题

问题:写入固定长度的字符串[write(byte b[])],观察ByteArrayOutputStream中buf 的大小始终比字符串 Bytes的Size大很多,很是不解 分析发现: private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = buf.length; int newCapacity = oldCapacity << 1; if (newCapacity - minCapa

做一个手机端页面时,遇到了一个奇怪的问题:字体的显示大小,与在CSS中指定的大小不一致

最近在做一个手机端页面时,遇到了一个奇怪的问题:字体的显示大小,与在CSS中指定的大小不一致.大家可以查看这个Demo(记得打开Chrome DevTools). 就如上图所示,你可以发现,原本指定的字体大小是24px,但是最终计算出来的却是53px,看到这诡异的结果,我心中暗骂一句:这什么鬼! 随后开始对问题各种排查:某个标签引起的?某个CSS引起的?又或者是某句JS代码引起的.通过一坨坨的删代码,发现貌似都不是.我不禁又骂,到底什么鬼!不过中间还是发现了一些端倪:当页面中的标签数量或者文本数

.net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息.举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个Key来判断用户是否登录,如果登录的话用户名又是多少. 我们知 道,Session对于每一个客户端(或者说浏览器实例)是"人手一份",用户首次与Web服务器建 立连接的时候,服务器会给用户分发一个 SessionID作为标识.SessionID是一个由24个字符组成的随机字符串.用户每次提

c++: 获取delete[]中的数组大小

看一个小例子: 1 #include <iostream> 2   3 using namespace std; 4   5 class A { 6 public: 7     A() { cout << "A::A()" << endl; } 8     ~A() { cout << "A::~A()" << endl; } 9 }; 10   11 int main() { 12     A* a =

v$asm_diskgroup和v$asm_disk中对于 disk 大小的不同含义

v$asm_diskgroup 中看到的大小是各个物理磁盘(raw or sdh3)大小的sum值. v$asm_disk 中显示的大小是 ASM disk(DGDATA_0003)分配时(将该asm disk 加入asm disk group时)指定的大小 从 ASM alert log中可以看到 SQL> CREATE DISKGROUP dgdata External REDUNDANCY DISK '/dev/raw/raw7' SIZE 4568M , '/dev/raw/raw8'