UITableview ios中的水平和垂直滚动视图
Posted
技术标签:
【中文标题】UITableview ios中的水平和垂直滚动视图【英文标题】:Horizontal and vertical scrollview in a UITableview ios 【发布时间】:2016-11-22 06:49:21 【问题描述】:我想在单个 UITableview 中添加水平滚动和垂直滚动。
像这样,
我尽力了,但我没有得到解决方案。谁能帮帮我。
感谢所有解决方案。
【问题讨论】:
我已经尽力了,但我没有得到解决方案。你能显示代码吗 我的代码完全错误,我删除了它。请问您有什么建议吗? tableViewCell 的第一行根据您的需要采用另一个集合视图或 TableView。具有垂直滚动的主 tableView 和您的内部集合/tableview 滚动水平.. 默认表格视图不支持水平滚动。您可以在 tableview 的一个单元格内使用滚动视图或集合视图来实现此目的。 有没有办法将 UIScrollview 创建为自定义单元格并将其添加到第一行?它会起作用吗? 【参考方案1】:是的,你可以这样做..
为此,您需要在每个单元格内添加 scrollView
并调整其内容大小,以便它可以水平滚动。
让我简要地告诉你如何做到这一点..
如果您使用的是 AutoLayouts,您应该在 TableView Cell 的 ContentView 中插入一个 UIScrollView 并为它们提供约束 (.Top .Trailing .Bottom .Leading)
并且所有这些约束都有 constant = 0
。
然后在此视图中添加另一个UIView
,并设置您为scrollView
设置的相同约束。这将向您显示红色约束,表明这些约束是不明确的,但不必担心只需控制将您的光标从该视图绘制到 Scroll View 的 parentView 并设置相等的宽度和相等的高度。完成后请更改priority of equal width constraint from 1000 to 720
。
现在最终在上面的UIView
中添加您的实际内容视图,并在此视图中插入您想要插入的任何内容,它可能会超出其父视图的边界。添加完对象后,只需将上面提到的(.Top .Trailing .Bottom .Leading)
的约束设置为相同的常量,但这次您还应该提供宽度约束。
这个宽度约束实际上将作为一个约束高度。您可以稍后通过将此宽度约束设置为 IBOutLet 来更改大小,然后以编程方式调整 scrollContent 宽度。
为了获得良好的实践,您应该为您的 TableViewCell
创建一个 CustomClass
【讨论】:
【参考方案2】:是的,您可以在每个单元格处添加滚动条。
您需要使用 UICollectionView 创建自定义单元格,并将 delegate, datasource 从您的控制器中放入。 然后在控制器中实现UICollectionViewDelegate、UICollectionViewDatasource方法。 要识别当前显示哪个单元格,请在单元格类中创建属性,例如您可以在 tableView willDisplay Cell 中设置的 tableViewIndexPath。 我认为它对你有帮助。
【讨论】:
【参考方案3】:这将根据您的要求对我有用。请试试这个。
#pragma mark -- Table view delegate and datasource --
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return 10;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellid = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellid];
if (cell == nil)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellid];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
self.tblHistory.showsHorizontalScrollIndicator = NO;
self.tblHistory.showsVerticalScrollIndicator = NO;
if (indexPath.row == 0)
UIScrollView *scrollViewFood = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 44)];
scrollViewFood.pagingEnabled = YES;
UILabel *lblFood;
NSInteger numberOfFoods = arrFoods.count;
CGFloat xOrigin = 0;
for (int i = 0; i < numberOfFoods; i++)
NSString *strNames = [arrFoods objectAtIndex:i];
CGSize textSize=[strNames sizeWithAttributes:
@NSFontAttributeName: [UIFont boldSystemFontOfSize:14.0]];
xOrigin = CGRectGetMaxX(lblFood.frame);
lblFood = [[UILabel alloc] initWithFrame:CGRectMake(xOrigin, 0, textSize.width + 10, 44)];
lblFood.text = strNames;
lblFood.font = [UIFont boldSystemFontOfSize:14.0];
lblFood.textAlignment = NSTextAlignmentCenter;
lblFood.backgroundColor = [UIColor clearColor];
[scrollViewFood addSubview:lblFood];
scrollViewFood.contentSize = CGSizeMake(lblFood.frame.size.width + xOrigin + 10,44);
scrollViewFood.showsHorizontalScrollIndicator = NO;
scrollViewFood.showsVerticalScrollIndicator = NO;
scrollViewFood.delegate=self ;
[cell.contentView addSubview:scrollViewFood];
else if (indexPath.row == 2)
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 44)];
scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(cell.frame.size.width , 100);
[cell.contentView addSubview:scrollView];
return cell;
您可以根据需要更改标签的高度、宽度。
【讨论】:
【参考方案4】:为了更好地理解 UITableView 滚动,您可以点击这两个链接
horizontally table scrolling
vertically table scrolling
我希望它可以帮助您更好地理解和熟悉 UITableViewDelegate。
【讨论】:
【参考方案5】:您需要通过子类化来创建自定义滚动视图,然后将下面的代码放入其中。在 Storyboard 或其他内容中,使用此自定义 scrollView 类。然后 TableView 和 Scroll View 将同时滚动。您需要这样做,因为无法从您的 ViewController 访问 ScrollView 的 gestureRecognizer 委托,它必须通过子类化从 ScrollView 类本身获取。
- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer
return YES;
【讨论】:
以上是关于UITableview ios中的水平和垂直滚动视图的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin iOS Autolayout:自动调整各种设备的宽度和垂直滚动,同时保持水平滚动禁用演示链接