Как правильно изменить размер нарисованного UITableViewCell? - PullRequest
7 голосов
/ 19 октября 2008

По соображениям производительности я рисую строки для моего UITableViewCell в пользовательском представлении, которое переопределяет его метод drawRect для рисования строк непосредственно в прямоугольнике представления с использованием NSString: drawInRect. Это похоже на Пример 5-CustomTableViewCell Apple TableViewSuite.

Однако, когда я вызываю setEditing в ячейке, чтобы вызвать кнопку удаления, представление заканчивается сжатым появлением после завершения анимации. Чтобы продемонстрировать это, вызовите setEditing: YES в примере CustomTableViewCell, упомянутом выше, и наблюдайте искажение. Есть ли способ обойти это, или я должен просто вернуться к использованию UILabels для моего текста?

Ответы [ 4 ]

5 голосов
/ 17 января 2009

У меня была похожая проблема с UIView внутри UITableViewCell. Я решил это, изменив UIView contentMode на UIViewContentModeLeft. (Я написал это здесь , со скриншотами.)

2 голосов
/ 19 октября 2008

У меня тоже была эта проблема, и в моем случае я исправил ее, обработав 2 состояния в моем методе drawRect, одно при редактировании, другое - нет. Другими словами, я учел размер кнопки удаления и получил свой интерфейс для перекраски ячейки по-другому. Я не уверен, что это самый эффективный способ, но вот код, который я использовал для перерисовки:

-(void)_refreshTableAndCells{
    //refresh the table
    [myCustomTableView reloadData];
    //refresh all the visible cells
    for (UITableViewCell *cell in myCustomTableView.visibleCells){
        LocationCellView *locationCell = [cell.contentView.subviews objectAtIndex:0];
        [locationCell setNeedsDisplay];
    }

}

Я, однако, Objective-C n00b, поэтому я был бы более чем рад, если бы кто-то предложил лучший способ, чем этот.

1 голос
/ 21 сентября 2009

Я обычно просто изменяю значения x и width (или что-то еще) того, что я хочу, чтобы они отличались при редактировании или нет. UITableView автоматически вызывает layoutSubviews, когда вы начинаете редактирование, поэтому вам не нужно перебирать ячейки и делать это самостоятельно.

- (void)layoutSubviews {
    [super layoutSubviews];

    CGFloat editingPadding = 5.0;
    self.textLabel = CGRectMake((self.editing ? self.textLabel.frame.origin.x + editingPadding : self.textLabel.frame.origin.x), self.textLabel.origin.y, (self.editing ? self.textLabel.frame.size.width - editingPadding : self.textLabel.frame.size.width), self.textLabel.frame.size.height);
}
0 голосов
/ 04 января 2009

Попробуйте установить для contentMode вашего собственного пользовательского представления (которое находится внутри contentView ячейки) значение UIViewContentModeLeft. «Сжатие» происходит из-за того, что по умолчанию contentMode имеет значение UIViewContentModeScaleToFill.

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