Странная ошибка в устройстве: содержимое ячейки UITableView не отображается - PullRequest
1 голос
/ 27 мая 2009

У меня действительно странная ошибка. Когда я прокручиваю свое табличное представление вниз к разделу, который я назвал «описанием», ячейки в этом разделе не будут отображаться. Вместо этого заголовок раздела повторяется снова и снова. Похоже, кто бы ни отвечал за отображение экрана в iPhone, он не находит ничего для отображения и отображения того, что было на экране раньше (и это название раздела, потому что я прокрутил вниз).

Если я сделаю снимок экрана, вместо ячейки просто черный фон.

Эта ошибка произошла не в симуляторе, а только в реальном устройстве.

Кто-нибудь когда-нибудь встречал такого рода вещи? Не могли бы вы догадаться, где проблема?

Ответы [ 3 ]

0 голосов
/ 28 мая 2009

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

Не стесняйтесь проверить видео, которое я сделал, это очень любопытное поведение для iPhone, вы даже видели это? dl.free.fr/rlQmFyWS0

Вот код для cellForRowAtIndexPath: метод, только часть, связанная с ячейкой описания:

case 3: // A big cell containing the description
    {
        // Try to find an already allocated cell with the description (note : there is only one description cell per table so no need to check the content...)
        UITableViewCell * descriptionCell = [tableView dequeueReusableCellWithIdentifier:kTextCellIdentifier];
        if (descriptionCell == nil) {
            // As a frame, use the description label's one plus a little margin for the height
            descriptionCell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, self.descriptionText.frame.size.height + (2*kCellInset)) reuseIdentifier:kTextCellIdentifier] autorelease];
            descriptionCell.selectionStyle = UITableViewCellSelectionStyleNone;
            // The descriptionText UILabel has been previously initialized properly by tableview:heightForRowAtIndexpath: method
            [descriptionCell.contentView addSubview:self.descriptionText];
        }
        return descriptionCell;

И вот часть, где я инициализировал поле descriptionText:

// Customize row height for each cell
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 3) {
    CGSize realSize;
    if (self.descriptionText != nil) {
        // the description has been previously initialized
        realSize = descriptionText.frame.size;
    }
    else {
        // We need to dynamically resolve the height for the description zone
        NSString * desc = (NSString *)[product objectForKey:@"description"];
        UILabel * descLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        // Unlimited number of lines
        descLabel.numberOfLines = 0;
        descLabel.text = desc;
        // Set a preferred width and anything for the height
        realSize = [descLabel sizeThatFits:CGSizeMake(tableView.frame.size.width - (2*kCellInset), 1)];
        // Take the opportunity to set the frame with the correct values
        descLabel.frame = CGRectMake(kCellInset, kCellInset, realSize.width, realSize.height);
        self.descriptionText = descLabel;
        [descLabel release];
    }
    return (realSize.height + (2*kCellInset));
}
else {
    return kImageCellHeight;
}   
return 0;   

}

Любое предположение будет более чем приветствоваться ... Я продолжаю расследовать здесь

0 голосов
/ 28 мая 2009

Я нашел решение ... Это было очевидно, но все же ...

Размер моего UILabel превышает 2048 пикселей. Нам не разрешено использовать размер больше этого, поэтому рендеринг такой странный.

Этот поток stackoverflow.com/questions/773386/inserting-various-views-into-uiscrollview уже имел дело с этой проблемой.

0 голосов
/ 27 мая 2009

Попробуйте изменить описание слова на что-то другое. Классы Objective C используют слово description для обозначения метода, в котором объект может описывать себя с помощью строки NSString. Если смена имени исправит это, ваша ошибка как-то связана с этим.

Вы можете увидеть описание на работе, как это:

NSString *aString = [[NSString alloc] initWithFormat:@"hi"];
NSLog(@"%@", [aString description]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...