グループ化されたテーブルビューでiPhoneアプリのUITableViewCellをカスタマイズしようとしています。私がしたいのは、イメージの幅がパディング(マイナス)(280)とイメージのサイズに基づく高さの変数を取ることです。カスタムUITableViewCellのサイズ変更と画像サイズに基づくUIImageViewの設定
現在、SDWebImageを使用してリモート画像を非同期にダウンロードしています。この場合、これは正しいことではないかもしれません。また、初期化時にカスタムセルにイメージを与える方法を理解するのに問題があります。イメージURLはDetailViewControllerのself.beerPhotoに格納されます。
私はこれをいくつかの方法で検索しましたが、私が探しているものを正確に見つけられませんでした。一番近いのはHow to scale a UIImageView proportionallyでしたが、このコードは動作させようとしましたが、初期化後にイメージを設定すると空白のセルが残っていたため、このメソッドは初期化時にイメージを持つ必要がありました。
現在のコードには、縦方向の画像を近似するように設定された定数が含まれています。実際には、画像の一部は肖像画であり、一部は風景の向きです。
知りたいことがあれば教えてください。カスタムUITableViewCellのため
ヘッダ:カスタム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のための実装の
#import <UIKit/UIKit.h>
@interface BeerDetailHead : UITableViewCell {
UILabel *beerName;
UIImageView *beerImage;
}
@property(nonatomic, retain)UILabel *beerName;
@property(nonatomic, retain)UIImageView *beerImage;
@end
関連部分tableView:heightForRowAtIndexPath:
デリゲートメソッドを実装し、ための計算高さを返し
- (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を定数で実装しました。それをここにリストするのを忘れた。現時点では、カスタムUITableViewCellは、イメージの幅、高さ、および一定のサイズ変更された幅280を使用して、UIImageViewフレームの正しい高さを計算します。viewDidAppearでreloadDataを呼び出すと、正しいイメージが得られます。ただし、heightForRowAtIndexPathは、イメージの高さが正しくなる前に計算されます。まだ高さのための適切な解決策を探しています。 – scottoliver
ちょっと好奇心が強いのはなぜですか?何か特別な理由はありますか? – fatih