我在一个 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/