私にはカスタムUITableViewController
があり、その中で動的にスタイルをUITableViewCell
設定していますUITableViewCellStyleSubtitle
。セルが再利用されるとき、そのプロパティがmyまたは設定imageView
を尊重しないことを除いて、すべてが良好です。理想的には、コンテンツがデフォルトのサイズ/形状(40x40の正方形であると私は信じています)に準拠することを望みます。contentMode
clipsToBounds
サブクラス化、または画像のサイズを正確に合わせるようにサイズ変更することを提案する他の投稿(以下のリンク)がありますUITableViewCell
が、これらは両方とも回避策のように感じ、(imho)私がすでに小さく引っ張っていることを考えると私のコードを過度に複雑にします(非正方形)画像。
UITableViewCellのサブクラス化を提案します:UITableViewCell のimageViewの境界を変更します
すべての画像のサイズ変更を提案: UITableViewCellのimageViewは40x40に適合
コード例:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *kCellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier];
}
NSString *mainText = @"mainText";
NSString *subtitle = @"subText";
[[cell textLabel] setText:mainText];
[[cell detailTextLabel] setText:subtitle];
// get album cover
UIImage *imageForCell = [album objectForKey:@"coverImage"];
// this is the broken part -
// it works upon first load, but it is NOT applied when a cell is re-used/dequeued..
// instead, the image is displayed un-scaled and un-square
[[cell imageView] setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];
[[cell imageView] setContentMode:UIViewContentModeScaleAspectFill];
[[cell imageView] setClipsToBounds:YES];
if (imageForCell) {
[[cell imageView] setImage:imageForCell];
} else {
/* code to retrieve custom image */
}
return cell;
}
何が得られますか?UITableViewCellにバグはありますか?それとも、これは何らかの理由で設計によるものですか?