UITableView ImageView 太大
Posted
技术标签:
【中文标题】UITableView ImageView 太大【英文标题】:UITableView ImageView too large 【发布时间】:2013-11-26 23:14:33 【问题描述】:我有点困惑,为什么我的图片大小不合适。我将 44x44 大小的图像传递给 UITableView
,默认行高为 44 像素,但我得到以下结果:
这不是我应该如何设置我的UITableViewCell
图像吗?
UIImage *imageOne = [UIImage imageNamed:@"sent-indicator@2x.png"];
cell.imageView.image = imageOne;
【问题讨论】:
请注意,对于 UIImage imageNamed,不要传递 @2x 或 .png。它将假设 png 并自动做出视网膜/非视网膜决定。 @Apollo 嗨!你能接受我的回答吗? :) 【参考方案1】:从代码中的图像名称中删除 @2x。系统找到视网膜图像
【讨论】:
【参考方案2】:一些想法:
我会在调试器中运行应用程序,点击“暂停”按钮,然后在(lldb)
提示符处键入
po [[UIWindow keyWindow] recursiveDescription]
这将产生一个很长的神秘日志,但您可以确认确切的屏幕坐标。我想你会发现图像视图是 43 点高。
(lldb) po [[UIWindow keyWindow] recursiveDescription]
<UIWindow: 0x8cb45e0; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x8cb1ca0>; layer = <UIWindowLayer: 0x8cb2c70>>
| <UITableView: 0x9031400; frame = (0 0; 320 480); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x8a950c0>; layer = <CALayer: 0x8a92ed0>; contentOffset: 0, 0>
| | <UITableViewWrapperView: 0x8a95c10; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x8a95ce0>>
| | | <UITableViewCell: 0x8e9e1b0; frame = (0 440; 320 44); text = 'Row 10'; autoresize = W; layer = <CALayer: 0x8e9d7b0>>
| | | | <UITableViewCellScrollView: 0x8e9e890; frame = (0 0; 320 44); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x8e9eb20>; layer = <CALayer: 0x8e9ea60>; contentOffset: 0, 0>
| | | | | <UITableViewCellContentView: 0x8e9d7e0; frame = (0 0; 320 43.5); opaque = NO; gestureRecognizers = <NSArray: 0x8e9ee70>; layer = <CALayer: 0x8e9d850>>
| | | | | | <UILabel: 0x8e9e340; frame = (73 0; 232 43.5); text = 'Row 10'; clipsToBounds = YES; layer = <CALayer: 0x8e9e3e0>>
| | | | | | <UIImageView: 0x8e9e620; frame = (15 6; 43 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x8e9d720>>
| | | | | <_UITableViewCellSeparatorView: 0x8e9fb60; frame = (73 43.5; 247 0.5); layer = <CALayer: 0x8e9fbd0>>
| | | <UITableViewCell: 0x8e9d3f0; frame = (0 396; 320 44); text = 'Row 9'; autoresize = W; layer = <CALayer: 0x8e9ca10>>
| | | | <UITableViewCellScrollView: 0x8e9daf0; frame = (0 0; 320 44); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x8e9dd80>; layer = <CALayer: 0x8e9dcc0>; contentOffset: 0, 0>
| | | | | <UITableViewCellContentView: 0x8e9ca40; frame = (0 0; 320 43.5); opaque = NO; gestureRecognizers = <NSArray: 0x8e9e0d0>; layer = <CALayer: 0x8e9d580>>
| | | | | | <UILabel: 0x8e9d5b0; frame = (73 0; 232 43.5); text = 'Row 9'; clipsToBounds = YES; layer = <CALayer: 0x8e9d650>>
| | | | | | <UIImageView: 0x8e9d880; frame = (15 6; 43 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x8e9c980>>
| | | | | <_UITableViewCellSeparatorView: 0x8e9fa70; frame = (73 43.5; 247 0.5); layer = <CALayer: 0x8e9fae0>>
| | | <UITableViewCell: 0x8e9c620; frame = (0 352; 320 44); text = 'Row 8'; autoresize = W; layer = <CALayer: 0x8e9bc50>>
| | | | <UITableViewCellScrollView: 0x8e9cd30; frame = (0 0; 320 44); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x8e9cfc0>; layer = <CALayer: 0x8e9cf00>; contentOffset: 0, 0>
| | | | | <UITableViewCellContentView: 0x8e9bc80; frame = (0 0; 320 43.5); opaque = NO; gestureRecognizers = <NSArray: 0x8e9d310>; layer = <CALayer: 0x8e9c7b0>>
| | | | | | <UILabel: 0x8e9c7e0; frame = (73 0; 232 43.5); text = 'Row 8'; clipsToBounds = YES; layer = <CALayer: 0x8e9c880>>
| | | | | | <UIImageView: 0x8e9cac0; frame = (15 6; 43 31); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x8e9bbc0>>
| | | | | <_UITableViewCellSeparatorView: 0x8e9f980; frame = (73 43.5; 247 0.5); layer = <CALayer: 0x8e9f9f0>>
顺便说一下,这是 43 个“点”,而不是“像素”。您可能希望您的 @2x
再现为 86 像素高,而不是 43 像素高。非@2x
再现可以是 43 像素高。
【讨论】:
【参考方案3】:UITableViewCell
的边框包含在单元格的默认 44 点高度中。这意味着单元格的imageView
属性的默认大小实际上是 40x40 而不是 44x44,以适应这些边框。
有关更多信息,请参阅此答案:https://***.com/a/2122183/740474
【讨论】:
【参考方案4】:当您指定@2x 时,您正在指定用于视网膜显示器的图像,这意味着 44 x 44 图像实际上在视网膜显示器上被视为 22 x 22。如果您的单元格的高度为 44,那么您的图像应该是 88 像素高。
【讨论】:
以上是关于UITableView ImageView 太大的主要内容,如果未能解决你的问题,请参考以下文章
在 contentView(cell.imageView) 后面隐藏 UITableView 分隔符?
UITableView Cell ImageView问题[重复]
UITableView 单元格中的 imageView 在 touchdown 事件中违反 setClipsToBounds
UITableView 添加 WebView 和 ImageView 单元格