2013-04-25 114 views
0

我在重新加载表格单元格内的自定义UIViewSBBarChart)时出现问题。我不使用自动布局,因为它太难调整它可能存在或不存在的单元的所有组件。我手动计算每个矩形和那个工作。旋转后错误地重新加载

关于旋转,我试着在表格视图控制器中执行willRotateToInterfaceOrientation方法,里面有[self.tableView reloadData]。这将在旋转后再次生成单元格。精细。

在单元类的内部,我调用[self.barChart setNeedsDisplay]以确保图表的子视图将被重新加载,这是可行的。

现在的问题。最初,纵向视图打开并正确加载。当我旋转到风景时,这也起作用。当我旋转回肖像时,条的长度计算正确,但仍然显示为横向。因此,新的矩形为酒吧有正确的措施,但酒吧显示太长,部分在屏幕之外。

正确显示(和居中)框架的相同度量的标签,所以它应该是条视图重新加载的问题。

我在做什么错?

回答

0

我刚解决了我的问题。我在代码中发现了三个重大错误。

1)我从单元中删除控件后使用dequeueReusableCellWithIdentifier。这导致缺少控制和奇怪的行为。现在我每次从笔尖产生一个新的细胞。

2)我正在使用xy我从细胞中去除的对照值。我只是把数字值。

3)我正在使用frame来确定屏幕的宽度。但是,框架不会改变。为了解决这个问题,我使用了以下线程:How to get orientation-dependent height and width of the screen?

现在,我甚至不需要行[self.barChart setNeedsDisplay],我可以尽可能旋转设备,控件不再移动。 :)

我仍然不确定我必须调用reloadData来调整布局,但我还没有找到更好的解决方案。

所以,最后它的工作原理!非常感谢你的帮助,我希望这篇文章能够帮助别人。 :)

1

尝试重新加载您的tableview时则相应地调整检查[[UIApplication sharedApplication] statusBarOrientation]

。这将给出当前的轮换状态。

+0

谢谢你的答案,但我想要的是用条形图填充屏幕的宽度。所以图表的代码是'self.barChart.frame = CGRectMake(20,self.barChart.frame.origin.y,self.frame.size.width - 60,self.barChart.frame.size.height);' 。计算工作正常,但矩形仍然太长。我试过'[self.barChart setNeedsDisplayInRect:self.barChart.frame];'没有帮助。对于标签,我做'self.myLabel.frame = CGRectMake(self.barChart.frame.origin.x,self.barChart.frame.origin.y,self.barChart.frame.size.width,self.barChart.frame .size.height);'那是有效的。 – Antiohia 2013-04-26 06:30:17