iOS UITableView неожиданно добавляет поля - PullRequest
1 голос
/ 22 февраля 2012

У меня есть UITableView, и в настоящее время в нем есть одна ячейка. Я написал собственный класс TableViewCell, который наследуется от UITableViewCell для того, чтобы сделать некоторые пользовательские рисунки. Я установил ширину таблицы до желаемого размера и пытаюсь установить ширину ячейки того же размера, чтобы она заполнила всю ширину таблицы. Кажется, проблема в том, что я получаю некоторые поля с левой и правой сторон камеры, и я не знаю почему.

Вот пример проблемы. Я сделал фон TableView черным, чтобы быть более четким. TableView - правильный размер. Фоновое изображение добавляется в ячейку, а не в таблицу, и оно должно занимать всю ширину таблицы.

Я пытался сделать TableView шире (по ширине экрана), чтобы приспособиться к размеру фонового изображения, но это не совсем так. Я бы предпочел просто выяснить, откуда берутся эти поля и как я могу от них избавиться.

Сам TableView инициализируется в Интерфейсном Разработчике. Стиль установлен как «Сгруппированный», прокрутка отключена, а режим просмотра установлен как «Масштабировать до заполнения».

Вот метод класса ячейки 'initWithStyle

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier          
{                                                                                                    
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {                        
        // Initialization code                                                                       
        _primaryLabel = [[UILabel alloc] init];                                                      
        _primaryLabel.textAlignment = UITextAlignmentLeft;                                           
        _primaryLabel.font = [UIFont systemFontOfSize:18];                                           
        _primaryLabel.backgroundColor = [UIColor clearColor];                                        
        _detailLabel = [[UILabel alloc] init];                                                       
        _detailLabel.textAlignment = UITextAlignmentLeft;                                            
        _detailLabel.font = [UIFont systemFontOfSize:12];                                            
        _detailLabel.backgroundColor = [UIColor clearColor];                                         
        _icon = [[UIImageView alloc] init];                                                          

        [self.contentView addSubview:_primaryLabel];                                                 
        [self.contentView addSubview:_detailLabel];                                                  
        [self.contentView addSubview:_icon];                                                         

        self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;                            
        UIImageView* whiteDisclosureView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 15, 13)];
        [whiteDisclosureView setImage:[UIImage imageNamed:@"white_disclosure.png"]];                 
        self.accessoryView = whiteDisclosureView;

        UIImageView * background = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 305, 61)];     
        [background setImage:[UIImage imageNamed:@"button_silver.png"]];
        [self setBackgroundView:background];
        self.backgroundColor = [UIColor clearColor];                                                 

        self.frame = self.contentView.frame = CGRectMake(0, 0, 305, 61);                             
    }   
    return self;                                                                                     
}   

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Ваш tableView использует "сгруппированный" стиль?В сгруппированном стиле iOS обычно добавляет левое и правое поле для ячеек таблицы.

Возможно, это можно исправить, отрегулировав рамку tableView немного за пределами его суперпредставления. См. Здесь, например, в предыдущем вопросе

1 голос
/ 22 февраля 2012

Вы не должны явно устанавливать рамку (размер) вашей ячейки, но объявлять ее стиль. (Если вы этого еще не сделали) Ячейки предназначены для автоматического заполнения всего пространства. (Горизонтально)

cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

Если нет, когда вы выделяете ячейку, как установить рамку ячейки?

РЕДАКТИРОВАТЬ: Вместо использования жестко закодированных размеров кадров, используйте self.frame. Кроме того, удалите последний оператор, в котором вы установили рамку.

0 голосов
/ 28 августа 2013

Другое альтернативное решение, которое я использовал.

@ Решение jonkroll работает, но оно не удовлетворяет мою потребность.У меня есть раздел заголовка в табличном представлении, в котором я хочу оставить поля влево и вправо как есть, но хочу удалить их в обычной ячейке.

Решение, которое я сделал, - реализовать метод layoutSubViews внастраиваемая ячейка просмотра таблицы.В этом методе установите ширину contentView равной ширине ячейки таблицы.

-(void)layoutSubviews {
    self.contentView.frame.size.width = self.frame.size.width; 
}

Это может быть очень поздно, но я думаю, что некоторые люди столкнутся с той же проблемой.Надеюсь, это решение работает для вас, ребята:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...