【发布时间】:2012-02-14 15:38:50
【问题描述】:
作为一个小背景,我正在构建一个旋转的 UITableView 作为一种横向“选择器”视图。为此,我采用 UITableView,对其应用旋转变换,然后再次旋转 tableview 内的 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;
}
表格单元格的layoutSubviews
编辑:我根据单元格内容的长度手动设置单元格的大小(主要是宽度)
- (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 尺寸做同样的事情,因为这个值决定了单元格在 tableview 中的位置。
如果有一些我可能遗漏的重要信息,请告诉我。谢谢!
【问题讨论】:
标签: iphone ios uitableview cgaffinetransform