我将interfaceOrientation添加到了我的应用中。它对视图很好。我在CGRects中定义的一些表格单元格,用于将文本放置在单元格中。在纵向模式下,单元格长300px,横向模式为420px。我使用以下代码根据方向更改CGRect:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.interfaceOrientation == UIDeviceOrientationPortrait) {
NSString *currentLanguage = [[NSString alloc] initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"/Documents/sprache.txt"]];
static NSString *TableViewTableCellIdentifier = @"TableViewTableCellIdentifier";
UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:TableViewTableCellIdentifier];
CGRect cellRect = CGRectMake(0, 0, 300, 175);
cell.backgroundColor = [UIColor darkGrayColor];
cell = [[[UITableViewCell alloc] initWithFrame:cellRect reuseIdentifier:TableViewTableCellIdentifier] autorelease];
CGRect keyLabelRect = CGRectMake(0, 5, 5, 20);
UILabel *keyLabel = [[UILabel alloc]initWithFrame:keyLabelRect];
keyLabel.tag = 100; //.........
} else {
NSString *currentLanguage =
[[NSString alloc] initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"/Documents/sprache.txt"]];
static NSString *TableViewTableCellIdentifier = @"TableViewTableCellIdentifier";
UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:TableViewTableCellIdentifier];
CGRect cellRect = CGRectMake(0, 0, 450, 175);
cell.backgroundColor = [UIColor darkGrayColor];
cell = [[[UITableViewCell alloc] initWithFrame:cellRect reuseIdentifier:TableViewTableCellIdentifier] autorelease];
CGRect keyLabelRect = CGRectMake(0, 5, 5, 20);
UILabel *keyLabel = [[UILabel alloc] //.....
}
}
我的问题是,当表格可见且方向改变时,我需要滚动才能看到新的“布局”。如何在更改方向后设法“重新加载”视图?
答案 0 :(得分:1)
首先,这会像疯了一样泄漏。您创建单元格并将它们出列但您永远不会释放它们。您只需在每次请求单元格时创建一个全新的单元格。如果你出队,没有理由重新创建一个单元格,反之亦然。更重要的是,您可以创建与逻辑表中的行一样多的单元格。这将很快消耗你所有的记忆。
当您将单元格出列时,您需要检查它的框架是否正确,如果是,则重新使用它。如果不是,那么您需要释放单元格并创建另一个单元格。
其次,在您将现有单元格从屏幕上滚动之前,表格不会要求新单元格。这就是为什么你的单元格在滚动之前不会改变的原因。这是tableview的预期行为。
我对任何中等复杂视图的建议是为每个方向使用不同的视图 - 控制器/视图对。这似乎更多的工作,但通常我发现它实际上需要更少,它更容易管理。在这种情况下,拥有两个单独的表可能会为您带来很多悲伤。
答案 1 :(得分:0)
我很确定您在默认的UITableViewCell构造期间不需要指定帧。通常帧大小由UITableView本身处理。
但是如果您希望可以将setNeedsLayout和/或setNeedsDisplay消息发送到tableView以强制它更新单元格布局(在方向处理程序中)。