Начальный кадр, чтобы использовать для backgroundView UITableViewCell - PullRequest
2 голосов
/ 07 сентября 2011

В настоящее время я инициализирую фрейм backgroundView моего UITableViewCell с self.frame.Похоже, это хорошо работает для изменения ориентации устройства (фон ячейки заполняет всю ячейку, выглядит хорошо и т. Д.). Какой кадр лучше использовать (если есть)?

Редактировать # 1 : Я также инициализировал backgroundView с CGRectZero в качестве кадра.Это, кажется, не имеет значения (UITableViewCells и backgroundViews прекрасно работают во всех интерфейсных ориентациях).

Я также протестировал установку свойства autoresizingMask backgroundView.Это тоже не имело значения. Я просто хотел бы понять, на что (если что-нибудь) влияет исходный кадр backgroundViews.

Ответы [ 2 ]

1 голос
/ 10 августа 2012

Предполагая, что вы пытаетесь добавить UIImageView в качестве backgroundView и что вы пытаетесь изменить размер этого imageView, вот мой опыт:

Кажется невозможным изменить фрейм UITableViewCell.backgroundView (или, по крайней мере, не то, что Apple рекомендует, поэтому это не упоминается в документации). Чтобы использовать пользовательский размер UIImageView, например, с изменяемым размером UIImage, в качестве фона в UITableViewCell, я делаю следующее:

1) Создайте UIImageView и установите его свойство изображения для изображения по вашему желанию.

2) Добавьте UIImageView в качестве подпредставления UITableViewCell с помощью сообщения addSubview:

3) Отправьте UIImageView обратно, используя sendSubviewToBack: сообщение.

Это ставит ваш UIImageView позади любых других добавленных подпредставлений, и теперь вы можете манипулировать фреймом вашего 'backgroundView' (он же вид изображения).

Чтобы убедиться, что представление изображения будет соответствовать рамке tableViewCell, используйте свойства высоты и ширины cell.frame при расчете высоты просмотра изображения.

0 голосов
/ 18 мая 2013

Если вы разрабатываете настраиваемую ячейку табличного представления, решение заключается в настройке фрейма в методе layoutSubviews.Вот пользовательский UITableViewCell из одного из моих проектов, мне нужно 10 очков слева:

#import "TETopicCell.h"
#import "UIColor+Utils.h"

@implementation TETopicCell

@synthesize topicTitleLabel = _topicTitleLabel;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"theme_btn_yellow"]];
        bgImageView.contentMode = UIViewContentModeTopLeft;
        bgImageView.frame = CGRectMake(0.0f, 0.0f, 239.0f, 42.0f);
        self.backgroundView = bgImageView;

        _topicTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(46.0f, 0.0f, 206.0f, 42.0f)];
        _topicTitleLabel.backgroundColor = [UIColor clearColor];
        _topicTitleLabel.textColor = [UIColor colorWithR:116 G:74 B:1];

        [self.contentView addSubview:_topicTitleLabel];
    }
    return self;
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    // update frame here
    self.backgroundView.frame = CGRectOffset(self.backgroundView.frame, 10.0f, 0.0f);

    // and here      
    if (self.selectedBackgroundView){
        self.selectedBackgroundView.frame = CGRectOffset(self.selectedBackgroundView.frame, 10.0f, 0.0f);
    }
}

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

    if (selected) {
        UIImageView *selectedImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"theme_btn_red"]];
        selectedImageView.contentMode = UIViewContentModeTopLeft;
        selectedImageView.frame = CGRectMake(0.0f, 0.0f, 239.0f, 42.0f);

        self.selectedBackgroundView = selectedImageView;
        [_topicTitleLabel setTextColor:[UIColor colorWithR:255 G:211 B:211]];
    }
    else {
        self.selectedBackgroundView = nil;
        [_topicTitleLabel setTextColor:[UIColor colorWithR:116 G:74 B:1]];
    }
}

@end
...