【问题标题】:Scrollview containing two tableviews on same screen limits scrolling vertically在同一屏幕上包含两个表视图的滚动视图限制垂直滚动
【发布时间】:2013-11-29 08:42:16
【问题描述】:

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

通过使用以下代码,我可以对工作表视图进行“公共滚动”(您滚动一个表视图并同步移动另一个表视图):

    - (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 个表格视图。每个视图的滚动都很好。问题?当一个表比另一个表长(离开屏幕)并且您滚动较短的表时,它们都会在较短的表结束处停止垂直滚动。即:如果左表比右表长,并且您垂直滚动右侧,它们都会停止滚动到右表结束的位置。但是,如果您滚动左侧表格,那么它们都会一直滚动到左侧表格的末尾,即:右侧表格向上滚动并离开屏幕,而您仍然可以看到较长表格中的内容。这就是我希望它运行的方式。

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

【问题讨论】:

    标签: ios ipad uitableview uiscrollview


    【解决方案1】:

    如果你想使用 tableViews 作为 ScrollView 的子视图,那么你必须禁用滚动选项。因为,tableView 继承自 scrollView。

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

    现在将此最大尺寸设置为您的滚动视图的 contentSize 属性。

    scrollView.contentSize = maxSize;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        相关资源
        最近更新 更多