0

実際に与える画像のサイズに関係なくUITableViewCell、フレームサイズを明示的に設定したいので、のサブクラスを作成しました。imageView

そうは言っても、私のtableView負荷がかかると、一瞬のうちにすべてが変化するようです. 画像が少し大きくなり、 と がtitleLabel画像detailLabelに近づきます。サブクラスで何か間違ったことをしましたか?

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Selected View
        self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.frame];
        self.selectedBackgroundView.backgroundColor = RGB(233, 233, 233);

        // Text Label
        self.textLabel.textColor = [UIColor darkGrayColor];
        self.textLabel.opaque = YES;
        self.textLabel.highlightedTextColor = self.textLabel.textColor;

        // Detail
        self.detailTextLabel.font = [UIFont systemFontOfSize:12.0];
        self.detailTextLabel.numberOfLines = 3;
        self.detailTextLabel.opaque = YES;
        self.detailTextLabel.highlightedTextColor = self.detailTextLabel.textColor;

        // Cell
        self.opaque = YES;
    }
    return self;
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}


- (void)layoutSubviews {
    [super layoutSubviews];

    float desiredWidth = 70;
    float desiredHeight = 70;
    float leftMargin = 5;
    float topMargin = 5;

    float w=self.imageView.frame.size.width;
    self.imageView.contentMode = UIViewContentModeScaleAspectFill;
    self.imageView.clipsToBounds = YES;
    if (w>desiredWidth) {
        float widthSub = w - desiredWidth;
        self.imageView.frame = CGRectMake(leftMargin,topMargin,desiredWidth,desiredHeight);
        self.textLabel.frame = CGRectMake(self.textLabel.frame.origin.x-widthSub,self.textLabel.frame.origin.y,self.textLabel.frame.size.width+widthSub,self.textLabel.frame.size.height);
        self.detailTextLabel.frame = CGRectMake(self.detailTextLabel.frame.origin.x-widthSub,self.detailTextLabel.frame.origin.y,self.detailTextLabel.frame.size.width+widthSub,self.detailTextLabel.frame.size.height);

    }
}
4

1 に答える 1

0

私はあなたがやっているのを見ます

self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.frame];

そうあるべきだと本当に思う

self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.bounds];

self.selectedBackgroundView は親ビューの座標系に基づいて配置されるため

于 2012-10-30T22:13:04.693 に答える