在同一屏幕上包含两个表视图的Scrollview限制垂直滚动

时间:2013-11-15 20:15:25

标签: ios ipad uitableview uiscrollview

我在uiscrollview中有两个uitableviews。我在一个ipad屏幕上显示滚动视图,因此它同时显示两个tableviews(即:左边的tableview和右边的tableview)。

通过使用以下代码,我可以使用tableviews的“公共滚动”(滚动一个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];
}

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

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

2 个答案:

答案 0 :(得分:1)

如果要将tableViews用作ScrollView的子视图,则必须禁用滚动选项。因为,tableView继承自scrollView。

因此,您可以禁用tableviews的scollEnabled属性,而不是添加观察者。所以tableViews不再滚动了。并将tableViews的最大内容大小作为滚动视图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;

答案 1 :(得分:0)

我不清楚将表视图放入滚动视图的目的,因为它们都是滚动视图本身。但是,要回答您的问题,您只需设置较短表视图的contentInset,使其bottom等于两个表的高度差。