我正在制作像Pulse新闻阅读器一样的水平表视图。我在网上找到了几个例子,并且有效,但我想知道何时需要在转换后设置view.frame属性。
我发现的示例在90度旋转后重置垂直表格视图单元格中水平表格视图的框架
self.tableViewCell.horizontalTableView.transform = rotateTable;
self.tableViewCell.horizontalTableView.frame = CGRectMake(0, 0, self.tableViewCell.horizontalTableView.frame.size.width, self.tableViewCell.horizontalTableView.frame.size.height);
更多背景信息:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
TableViewCell *cell = (TableViewCell*)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];
CGAffineTransform rotateTable = CGAffineTransformMakeRotation(-M_PI_2);
self.tableViewCell.horizontalTableView.transform = rotateTable;
self.tableViewCell.horizontalTableView.frame = CGRectMake(0, 0, self.tableViewCell.horizontalTableView.frame.size.width, self.tableViewCell.horizontalTableView.frame.size.height);
self.tableViewCell.contentArray = [self.arrays objectAtIndex:indexPath.section];
self.tableViewCell.horizontalTableView.allowsSelection = YES;
cell = self.tableViewCell;
self.tableViewCell = nil;
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
但是在单元格转换(旋转)之后不要重置水平表格单元格的框架:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.horizontalTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"GameTableViewCell" owner:self options:nil];
cell = self.gameTableCell;
self.gameTableCell = nil;
}
CGAffineTransform rotateImage = CGAffineTransformMakeRotation(M_PI_2);
cell.transform = rotateImage;
return cell;
}
我尝试重置单元格的框架,它对输出没有影响,即使我提供了
cell.frame = CGMakeRect(200, 200, cell.frame.size.height, cell.frame.size.width)
哪个应该在桌面视图周围移动单元格,不是吗?
如果我没有重置self.tableViewCell.horizontalTableView.frame
的帧,则水平表会旋转,但位置错误。
为什么我需要在旋转后重置水平表视图的帧,而不是单个单元格(也是旋转的)?
谢谢!
// iPortable的插图
答案 0 :(得分:0)
我在解决你所有的问题时遇到了问题,但我会尽力而为 旋转设备时,表视图大小会更改(框架)。因此,您必须为表视图设置新帧以完成新的“设计”(将表视图拉伸到整个宽度)。对于单元格而言,情况并非如此,因为即使在旋转之后它们也保持相同的大小 一个例子:
________
|______| -> a cell width: 50 height: 200
旋转后:
___
| |
| | -> still the same size, width: 50 height: 200
|_|
CGAffineTransform
只是一种视觉效果。它的大小既不会影响其子视图的位置,也不会影响其大小。因此,您必须为您的单元格执行完全相反的旋转,然后才能进行表格视图。旋转的方向是错误的?颠倒,左,右,还是使用边缘进行旋转,以便选择错误的旋转点?
答案 1 :(得分:0)
啊,好好再读一遍后,我明白你在问什么^^
CGPointZero
以外的其他单元格。如果您想取代它,则必须创建更大的视图并移动内容。 (视图可以是半透明的,但它会大大减慢旧设备的滚动速度)drawRect: