gpt4 book ai didi

objective-c - 根据图像大小调整自定义 UITableViewCell 和包含的 UIImageView

转载 作者:行者123 更新时间:2023-11-29 13:46:09 26 4
gpt4 key购买 nike

我正在尝试为分组 TableView 中的 iPhone 应用程序自定义下面的 UITableViewCell。我想要做的是让图像宽度占据整个单元格减去填充 (280) 和基于图像大小的高度变量。

目前我正在使用 SDWebImage 异步下载远程图像。在这种情况下,这可能不是正确的做法。我也无法弄清楚如何在初始化时为自定义单元格提供图像。图片 URL 存储在 DetailViewController 的 self.beerPhoto 中。

我已经搜索了很多方法,但没有找到我要找的东西。最接近的是:How to scale a UIImageView proportionally , 但这种方法似乎要求单元格在初始化时有图像,因为我试图使这段代码工作但在初始化后设置图像留下了一个空白单元格。

当前代码包括我设置的常量以近似纵向图像。实际上,有些图像是纵向的,有些是横向的。

如果您需要了解任何其他信息,请告诉我。

自定义 UITableViewCell 的标题:

#import <UIKit/UIKit.h>


@interface BeerDetailHead : UITableViewCell {
UILabel *beerName;
UIImageView *beerImage;
}

@property(nonatomic, retain)UILabel *beerName;
@property(nonatomic, retain)UIImageView *beerImage;

@end

自定义 UITableViewCell 实现的相关部分

#import "BeerDetailHead.h"


@implementation BeerDetailHead

@synthesize beerName, beerImage;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
//beerName = [[UILabel alloc]init];
//beerName.textAlignment = UITextAlignmentLeft;
//beerName.font = [UIFont systemFontOfSize:14];
beerImage = [[UIImageView alloc]init];
//[self.contentView addSubview:beerName];
[self.contentView addSubview:beerImage];
}
return self;
}

- (void)layoutSubviews {
[super layoutSubviews];
CGRect contentRect = self.contentView.bounds;
CGFloat boundsX = contentRect.origin.x;
CGRect frame;
frame= CGRectMake(boundsX+10 ,10, 280, 375);
beerImage.frame = frame;
}

DetailViewController 的 cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

NSArray *listData =[self.tableContents objectForKey:
[self.sortedKeys objectAtIndex:[indexPath section]]];

NSLog(@"listData = %@", listData);

NSUInteger row = [indexPath row];

if ([self.sortedKeys objectAtIndex:[indexPath section]] == @"header"){
static NSString *headerTableIdentifier = @"HeaderTableIdentifier";
BeerDetailHead * headerCell = (BeerDetailHead*)[tableView
dequeueReusableCellWithIdentifier: headerTableIdentifier];

if(headerCell == nil) {

headerCell = [[[BeerDetailHead alloc] initWithFrame:CGRectZero reuseIdentifier:headerTableIdentifier] autorelease];
}

headerCell.beerName.text = [listData objectAtIndex:row];
[headerCell.beerImage setImageWithURL:[NSURL URLWithString:self.beerPhoto]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
//NSLog(@"frame = %@", headerCell.beerImage.frame);

return headerCell;
}
else{
//use standard UITableViewCell
}
}

最佳答案

实现 tableView:heightForRowAtIndexPath: 委托(delegate)方法并从该方法返回每行的计算高度。
在您的 tableView 上加载每个图像调用 reloadData 之后,或者如果您想要动画更改调用:

[self.tableView beginUpdates];
[self.tableView endUpdates];

此外,您可能希望将多个序列高度更新合并为一个。我会用一点延迟来执行此操作:

// triggerUpdates calls the above code
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(triggerUpdates) object:nil];
[self performSelector:@selector(triggerUpdates) withObject:nil afterDelay:0.1];

关于objective-c - 根据图像大小调整自定义 UITableViewCell 和包含的 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7329157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com