iPad:弹出视图中的表格不滚动以显示选定的行
Posted
技术标签:
【中文标题】iPad:弹出视图中的表格不滚动以显示选定的行【英文标题】:iPad: Tables in Popover Views do not Scroll to Show Selected Row 【发布时间】:2010-04-14 21:40:55 【问题描述】:iPad 上的横向视图控制器有两个问题。
(1) 我有两个包含表格的弹出窗口。表格应滚动到特定行以反映主视图中的选择。相反,表格确实向下滚动了一些,但实际选择的行仍然不在屏幕上。
(2) 我所有的 action sheet 的宽度都是 320。
在 Interface Builder 中,我的所有视图都是横向创建的。只有主窗口不是,但我看不到改变它的方法。
我的配置:启动后,我的主窗口和主视图控制器视图得到以下坐标:
Window frame 0, 0, 768, 1024 mainView frame 0, 0, 748, 1024
之后的所有其他视图在被召唤时(加载时但在呈现之前)显示这些坐标:
frame of keysig 0, 0, 1024, 768
frame of instrumentSelect 20, 0, 1024, 768
frame of settings 0, 0, 467, 300
在我所有的视图控制器中,我回复shouldAutorotateToInterfaceOrientation
:
return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
(interfaceOrientation == UIInterfaceOrientationLandscapeRight));
一切(几乎)都按预期运行。该应用程序启动到两种横向模式之一。视图(和视图控制器)显示它所属的所有内容,并且点击按预期在整个屏幕上工作。但是,我仍然有这两个问题。
问题 1: 我有两个弹出窗口,其中包含足够长的表格,可以跑出屏幕。表格应滚动到选定的行。他们确实滚动,即他们没有从第 1 行开始,但他们没有滚动到足以实际显示所选行的程度。
alt text http://idisk.mac.com/mahboud//Public/keysig.png
alt text http://idisk.mac.com/mahboud//Public/instrumentlist.png
似乎 UITable 内部矩形创建时使用了错误的数字并保持不变,但我检查了 UITableView 的两个滚动视图内容坐标,它们似乎是合理的。
问题 2: 我认为这与问题 1 有关,因为我的操作表的宽度为 320。我只能假设 iPad 只允许操作表宽度为 320 或 480,因为它不知何故认为屏幕是纵向模式,它使用更窄的宽度。
你有它。我不敢相信我仍然对方向问题感到困惑。我发誓苹果不会让一个横向应用程序变得容易。有什么想法吗?
【问题讨论】:
这是个好问题。你显然花了一些时间。然而,你把真正的问题埋在了身体里。人们必须阅读数百个单词才能很好地了解您的问题是什么。将来,把问题放在首位,然后是任何细节。如果他们不必费力地找出您要问的问题,就会有更多的人阅读并回答您的问题。我已将问题编辑为更易于阅读的格式。 感谢您花时间澄清。 【参考方案1】:我有点想通了。如果我采取了
[self.tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionNone animated:YES];
从 -viewDidAppear 或 -viewWillAppear 中取而代之,而是将其放在我的 -presentPopoverFrom... 之后,然后就可以了:
[popController presentPopoverFromBarButtonItem:keySigBBItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[keySignatureTableVC.tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionMiddle animated:NO];
必须发生的事情是 -viewDidAppear 和 -viewWillAppear 都必须在 presentPopover... 调整大小或重新定向视图之前被调用。我在这两种方法中所做的不是在正确的框架或边界上工作。滚动后似乎有效。
【讨论】:
以上是关于iPad:弹出视图中的表格不滚动以显示选定的行的主要内容,如果未能解决你的问题,请参考以下文章