ios - 同一屏幕上包含两个表格 View 的 ScrollView 限制垂直滚动

标签 ios ipad uitableview uiscrollview

我在一个 uiscrollview 中有两个 uitableview。我在一个 iPad 屏幕上显示 ScrollView ,因此它同时显示两个表格 View (即:左侧的表格 View 和右侧的表格 View )。

我使用以下代码实现了工作 TableView 的“公共(public)滚动”(您滚动一个 TableView 并同步移动另一个 TableView ):

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    static BOOL isObservingContentOffsetChange = NO;
    if([object isKindOfClass:[UITableView class]]
       && [keyPath isEqualToString:@"contentOffset"])
    {
        if(isObservingContentOffsetChange) return;

        isObservingContentOffsetChange = YES;

        if(theTableViewLEFT != object)
        {
            CGPoint offset = [[change valueForKey:NSKeyValueChangeNewKey] CGPointValue];
            theTableViewLEFT.contentOffset = offset;
        }
        if(theTableViewRIGHT != object)
        {
            CGPoint offset = [[change valueForKey:NSKeyValueChangeNewKey] CGPointValue];
            theTableViewRIGHT.contentOffset = offset;
        }

        isObservingContentOffsetChange = NO;
        return;
    }

    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}

所以,这很好用。它是一个 ScrollView ,总共插入了 2 个表格 View 。每个 View 的滚动工作正常。问题?当一个表比另一个表长(离开屏幕)并且您滚动较短的表时,它们都会在较短的表结束处停止垂直滚动。即:如果左表比右表长,并且您垂直滚动右表,则它们都会在右表结束处停止滚动。但是,如果您滚动左表,那么它们都会一直滚动到左表的末尾,即:右表向上滚动并离开屏幕,而您仍然可以看到较长表中的内容。这是我希望它运行的方式。

我真的不能告诉人们使用更长的表格滚动。如何让两个表格都滚动到较长表格的整个高度?

最佳答案

如果您想使用 tableView 作为 ScrollView 的 subview ,则必须禁用滚动选项。因为,tableView继承自scrollView。

因此,您可以禁用 TableView 的 scollEnabled 属性,而不是添加观察者。所以 tableViews 将不再滚动。并将 tableViews 的最大内容大小作为 ScrollView ContentSize。因此,如果您滚动任何表格,它们将滚动到 TableView contentSize 的最大值。

例如:

UITableView *tblView1;// this is your left table View
UITableView *tblView2;// this is your right TableView

tblView1.scrollEnabled= NO;
tblView2.scrollEnabled= NO;

CGSize maxSize = CGSizeMake(MAX(tblView1.contentSize.width,  tblView2.contentSize.width), MAX(tblView1.contentSize.height, tblView2.contentSize.height));

现在将这个最大尺寸设置为你的scrollView的contentSize属性。

scrollView.contentSize = maxSize;

关于ios - 同一屏幕上包含两个表格 View 的 ScrollView 限制垂直滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009829/

相关文章:

ios - 苹果是否允许在 iPhone 应用程序中使用 tcpdump

ios - 更改 UItableView 高度后,我的滚动不再起作用。无法到达底部数据

iphone - 将 subview 添加到 UITableViewCell 问题

ios - 一些 tableView 行不显示,除非我滚动然后消失

ios - 在Tab中显示WebBrowser时,它会变成图像

iphone - 子类化自定义 UIButton

ios - 在 UIButton DidTouch 事件中执行任务时隐藏 UIImage

ios - 在 UINavigationBar 左侧的 "back"按钮旁边添加另一个按钮

UIPopoverController 中的 iPad UIImagePicker 仅选择保存的图像(不是来自相册)?

ios - 未调用 targetContentOffsetForProposedContentOffset