В качестве небольшого фона я создаю повернутый UITableView в качестве своего рода бокового вида «сборщика».Чтобы сделать это, я беру UITableView, применяю к нему преобразование вращения, а затем снова поворачиваю UITableViewCells внутри табличного представления.
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые ячейки таблицы становятся "не выровненными" - их рамка отрисовывается с определенным удаленным смещением (как в измерении x, так и в направлении y) от других ячеек таблицы.
Я сузил, что эта ошибка возникает в первой ячейке таблицы за пределами видимого прямоугольника табличного представления после вызова [tableView reloadData]
.(то есть, если у меня есть 4 ячейки таблицы, A, который полностью виден и прорисован, B, который наполовину включен / наполовину закрыт от вида, и C и D, которые полностью не видны на экране и еще не отрисованы, при прокрутке до C этопрослушивается, но когда я прокручиваю до D, это не так).
Теперь для некоторого кода -
Инициирование содержащего представления
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
...
self.tableView = [[UITableView alloc] init];
[self addSubview:_tableView];
[_tableView setDelegate:self];
[_tableView setShowsVerticalScrollIndicator:NO];
[_tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
CGAffineTransform transform = CGAffineTransformMakeRotation(-1.5707963);
_tableView.transform = transform;
_tableView.frame = self.bounds;
...
}
return self;
}
соответствующие методы делегата
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath].frame.size.height;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
CGAffineTransform transform = CGAffineTransformMakeRotation(1.5707963);
cell.transform = transform;
}
макет ячейки таблицы Subviews
edit: Я вручную устанавливаю размер ячейки (в основном ширину), основываясь на длине содержимого ячейки
- (void)layoutSubviews {
[super layoutSubviews];
// some calculations and sizing of subviews
// height and width are swapped here, because the table cell will be rotated.
self.frame = (CGRect){self.frame.origin.x,self.frame.origin.y,calculatedHeight,calculatedWidth};
}
Казалось бы, ошибочная табличная ячейка frame.origin
установлена неправильно, когда она достигает подпредставлений макета.Установка значения origin.x
для фрейма в 0 устраняет проблему смещения размера x, но, очевидно, я не могу сделать то же самое для измерения y, потому что это значение определяет положение ячейки в виде таблицы.
Пожалуйста, дайте мне знать, если есть какая-то важная информация, которую я мог бы опустить.Спасибо!