在我的应用程序中,我有一个表视图。让我们说例如我在表视图中有10行值数据,顶部有一个导航栏。我以纵向模式启动应用程序。我看到10排。
现在我将iPad旋转到横向模式。我只看到9行。 1行隐藏在顶部导航工具栏下方。
我将它旋转回肖像,但我仍然只能看到9行。导航栏下方仍隐藏着1行。我拖动表视图并查看第1行。所以我的问题是,即使我从纵向更改为横向,我也会看到所有10行的变化,反之亦然。我试图更改tableview的setFrame值,但没有运气。如果您需要更多信息,请询问。谢谢。
答案 0 :(得分:0)
我没有完整的答案,我不知道为什么你的第一行在导航栏下面,也许你应该提供额外的代码或屏幕截图。
在最坏的情况下,我会将tableview分组并安排-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
或者我将虚拟视图从界面构建器中的对象拖放到tableview上方,这样第一行就不能进入导航栏。
无论如何,如果您必须以纵向和横向显示所有行,您可以检测方向更改并使行高更小或更大。
在viewWillAppear函数中添加通知程序
-(void)viewWillAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];}
方向更改通知此功能
- (void)orientationChanged:(NSNotification *)notification{
[self.tableview reloadData];
}
根据方向更改行高,并在方向更改时缩小行
//row height
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
{
//portrait mode view
return 40.0; //play with the value according to your needs
}
else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
{
//landscape view
return 30.0; //play with the value according to your needs
}
}