UiableViewCellseParatorStylenone не скрывает синюю сепараторную линию при выборе в UiableView

StackOverflow https://stackoverflow.com/questions/2799997

Вопрос

Прежде чем описать проблему, позвольте мне сначала указать, что это отчетливый вопрос от этот вопрос.

Эта проблема

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

Как я получил сюдаЯ изначально разработал этот взгляд таблицы, используя пользовательские классы UiableViewCell с соответствующими файлами Nib (.xib) и не имели никаких проблем с выборами: сепаратор был скрыт по желанию. Пред внимание, что прокрутка была вялой из-за всех накладных расходов с иерархии вида, поэтому я переработал пользовательские клетки для использования Loren Brichter Быстрое прокрутка раствор. Отказ Теперь прокрутка намного быстрее, но я не могу избавиться от сепаратора за жизнь меня.

Что я попробовал

Во время скриншота выше ...

  • Взгляд таблицы имеет «разделитель [нет] в IB.
  • UiviewController, который содержит табличное представление имеет эту строку в ViewDid Load: self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

Как вы можете увидеть на скриншоте, я вставил несколько неиспользуемых строк, чтобы доказать, что сепараторStyle установлен по желанию. Другие тестирования подтверждают, что TablView и Self.tableView представляют собой эквивалентные указатели на той же точке останова.

Я также попробовал настроить TableView.separatorColor к черному и очистить все с тем же результатом: клетки выглядят прямо, пока не будет сделан выбор.


Manjunath: вот код, который я использую для рисования альтернативных фонов в зависимости от того, затронута ли ячейка или нет. Вы можете увидеть разницу, которая менее тонкой, когда анимирован - на скриншоте.

if(self.highlighted) {
    textColor = [UIColor blackColor];
    UIImage *bg = [UIImage imageNamed:@"image-cell-background_highlighted.png"];
    [bg drawAtPoint:CGPointMake(0.0, 1.0)];
}
else {
    UIImage *bg = [UIImage imageNamed:@"image-cell-background.png"];
    [bg drawAtPoint:CGPointMake(0.0, 0.0)];
}

Это вызывается в Uiimagecell.m в drawContentView:, метод, унаследованный от ABTableViewCell Mr. Bricchter.

Это было полезно?

Решение

Крис,

Гуделиться в ABTableViewCell, я вижу:

- (void)setFrame:(CGRect)f
{
 [super setFrame:f];
 CGRect b = [self bounds];
 b.size.height -= 1; // leave room for the seperator line
 [contentView setFrame:b];
}

Поскольку высота ячейки является одним пикселем короче, чем фактическая ячейка, когда ячейка выбирается, эта линия однопотреблавает в цвете цвета выбора. Это может выглядеть как сепаратор, но это на самом деле цвет выбора.

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

Обновлять:

Приняв это изменение в проект FastScrollingExample -rootViewController:

- (void)viewDidLoad
{
 self.title = @"Fast Scrolling Example";
 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [super viewDidLoad];
}

И комментируя:

// if(self.selected)
// {
//  backgroundColor = [UIColor clearColor];
//  textColor = [UIColor whiteColor];
// }
// 

в -drawContentView Имитировать, что произойдет, если у вас не было цвета выбора, пока я получаю экран, как это:

Alt Text http://files.me.com/mahboud/7k656q.

Выглядит знакомо?

Как бы вы обрели это? Если вам не нужно выбрать ячейки, затем отключите выделение ячейки. В противном случае, если вы выбираете ячейки, то вы должны сделать прямо больше, поэтому цвет выбора по умолчанию не отображается при краской с вашим собственным цветом выбора в -drawConentRect.

Другие советы

Попробуй это:SetSeliousStyleStyleStyleStyle: UiableViewCellSelectionStylenone];

 // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {

        static NSString *CellIdentifier = NSLocalizedString(@"Cell",@"");
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (nil == cell)
        {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        }   
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top